我有一个带有静态值的模板化类,如下所示:
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/