2011-03-25 22 views
2

当使用__declspec(dllexport)时,应该重载的操作员是否也分配了这个出口标志?例如,假设你有这样的:在类中重载运算符是否需要使用__declspec(dllexport)(如果它们用于DLL项目中)?

/* 
Overloaded operator (equivalent operator) returns true if x equals compared vector 
*/ 
__declspec(dllexport) bool operator ==(const vector &v) 
{ 
    return (x == v.x && y==v.y && z==v.z); 
} 

是为了在你的类的类型使用==必要__declspec(dllexport)?还是应该不导出,因为它是特定于该类和任何继承类?

回答

3

您通常会将__declspec(dllexport)应用于类声明,以便导出整个shebang。在当时做一名成员是令人厌烦和麻烦的。不知道为什么你会跳过超载。如果你在类中公开它,那么为什么不从DLL中暴露它。如果你不这样做,那么有一天有人会非常难以诊断链接器错误。

+0

谢谢。 Microsoft创建DLL的演练非常糟糕。在这里很高兴有人更有帮助! :) – Darkenor 2011-03-25 18:50:26

3

像这样的函数通常会被内联。我无法想象为什么你会想要强制跨模块(间接和修复)函数调用。

但我提出反对导出类的建议,因为它会在两个DLL之间建立紧密耦合,这是后面真正的维护头痛。

+0

+1全部也是如此。 – 2011-03-25 19:30:30

相关问题