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



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

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

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

在 .h 中

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

在.cpp

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

在两个 DLL 中,我在需要的地方包含 .h,并且.cpp在项目中链接。

谢谢。

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

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

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

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

这是迈耶斯的单身风格。

注意:我希望我不必告诉你与 ABI 相关的传递C++对象或通过模块边界导出类的危险,对吧?

最新更新