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

标签 c++ static initialization

我有一个带有静态成员的类,该成员的定义在 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;
};

这是很好的旧时尚 Meyers 的单例风格。

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

关于c++ - 两个 DLL C++ 中的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27115643/

相关文章:

c++ - 实现归并排序

c++ - 如何在 Linux 上使用 C++ 查询 Informix 数据库?使用 C++ 的对象接口(interface)时出现编译器错误

c++ - 初始化 3d vector c++

C++:为下次调用函数保存变量值

c++ - C++中的模棱两可的定义

c++ - socket.h 中::accept 的错误号在哪里

xcode - 无法运行命令 'StripNIB <filename>.nib' - XCode

java - 为什么程序不允许初始化静态最终变量?

C++ - 函数头中const和static关键字的区别

Python:在基类init中调用重写的基类方法