两个DLL C ++中的静态成员

时间:2014-11-24 22:49:08

标签: c++ static initialization

我有一个带有静态成员的类,成员的定义在cpp文件中。

我必须在两个不同的DLL中使用相同的成员定义,因此我需要在两个项目中包含cpp定义以进行编译。这是一个新的"版本"该成员。这意味着cpp在两个地方编译,它将有两个定义。

如何在两个DLL中只有一个定义。 或者我做错了什么或者我错过了什么?

在.h

class qwerty
{
public:
  static xyz* abc;
};

在.cpp

xyz* qwerty::abc = new xyz();

在两个DLL中,我包含了我需要的.h和.cpp在项目中的链接。

感谢。

1 个答案:

答案 0 :(得分:0)

解决方法是将该静态成员包装到提供它的静态成员函数中。如此:

class qwerty
{
public:
  static xyz* get_abc();
};

在cpp文件中(仅在DLL中):

xyz* qwerty::get_abc() {
  static xyz inst;
  return &inst;
};

这是一个很好的旧时尚迈耶斯'单身风格。

N.B。:我希望我不必告诉你有关传递C ++对象或通过模块边界导出类的ABI相关危险,对吗?