c++ - 跨动态链接库的模板静态类

标签 c++ class templates static

我有一个带有静态值的模板化类,如下所示:

  template <class TYPE>
 class A{
  static TYPE value;
 };

在 dll 的代码中我分配了静态值:

code of  DLL_1

A<float>::value = 2.0;

我希望我正在使用的所有 dll 共享该值,即我希望这样:

code of DLL_2

printf("value on DLL_2 %f",A<float>::value);

打印出“2.0”

有线索吗? 谢谢

最佳答案

我假设您是在专门谈论 Windows,您提到了“DLL”。只要将模板类/结构标记为已导出,就应该能够在 DLL 中设置值并在另一个 DLL 或程序中使用它们。 据我了解,在 Windows 上,这需要在编译设置值的 DLL 时使用 __declspec(dllexport),在编译 DLL 或程序时使用 __declspec(dllimport)使用动态链接库。例如:
dll.h:

#ifdef BUILDING_MY_DLL
# define MY_API __declspec(dllexport)
#else
# define MY_API __declspec(dllimport)
#endif
template<class TYPE>
struct MY_API A {
    static TYPE value;
};

dll.cpp:

#include "dll.h"
template<>
A<float>::value = 2.0f;

(__declspec 部分是 Windows 特定的。在 ELF 系统(Linux 等)上使用 GCC 时,您将使用 __attribute__((__visibility__("default"))) 导出类/结构,没有导入它。http://gcc.gnu.org/wiki/Visibility 有一些模板代码,您可以在其中更轻松地进行设置。

关于c++ - 跨动态链接库的模板静态类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3069257/

相关文章:

c++ - 如何 std::bind 模板函数?

c++ - 将抽象类继承与实例化模板混合

c++ - 对内置数据类型使用前向声明

python - 如何使用类方法创建自定义类实例?

java - 如何将变量从一个类发送到另一个类。

PHP 类问题

css - 覆盖现有 CSS 表规则的最佳方法是什么?

c++ - FreeType 如何呈现 ü ä ö 等特殊字符?

C++ STL vector 深度删除

c++ - 使用继承在类之间传递非静态变量