2

使用时__declspec(dllexport),重载运算符是否也应分配此导出标志?例如,假设您有类似的东西:

/* 
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)为了==在您的班级类型上使用是必要的吗?还是不应该导出它,因为它特定于该类和任何继承的类?

4

2 回答 2

4

您通常会将 __declspec(dllexport) 应用于类声明,以便导出整个 shebang。还导出 v-table,如果类有虚拟成员,这很重要。当时做一个成员是很累和麻烦的。

不知道为什么要跳过超载。如果你在类中公开了它,那么你肯定也应该从 DLL 中公开它。如果你不这样做,那么总有一天会有人很难诊断链接器错误。

于 2011-03-25T18:44:28.277 回答
3

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

但我建议不要导出类,因为它会在两个 DLL 之间造成紧密耦合,这在以后的维护中是一个真正令人头疼的问题。

于 2011-03-25T19:00:04.300 回答