在我们的项目中,我们有这样的东西:
struct PointI
{
// methods for getting, setting and calculating some point stuff
private:
int x;
int y;
};
struct PointD
{
// methods for getting, setting and calculating some point stuff
private:
double x;
double y;
};
我建议把它改成这样:
template<typename T>
struct Point
{
// methods for gettig, setting and calculating some point stuff
private:
T x;
T y;
};
typedef Point<int> PointI;
typedef Point<double> PointD;
typedef Point<float> PointF;
但这被拒绝了,我被告知:“这种方法存在一个问题——C++ 符号处理和导出。在导出符号(使用它们的 API)中使用模板时,模板太长了,而且没有办法导出模板。”
这个论点是否强大到允许大量代码重复?
最佳答案
您的老板(或其他人)可能是对的。如果您编写的库应该可以从 C++ 以外的其他语言使用,那么只用 C 编写接口(interface)通常是个好主意。
当然,你仍然可以在内部使用模板,只是不要暴露它们。
关于C++ 符号处理和导出 => 允许代码重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4352903/