导出/定义静态模板专用成员变量C++

Exporting/Defining Static Template Specialized Member Variable C++

本文关键字:专用 成员 变量 C++ 定义 静态 导出      更新时间:2023-10-16

所以我目前正在导出一个DLL,遇到了一个问题,我有一个包含静态char*[]成员变量的模板类。我想为该模板的专业化定义这个。

示例:

MyTemplate.h

#include <dll_defines.h>
template <typename T>
class MY_API MyTemplate
{
    public:
        static char const*  m_array[];
}

MySpecializedTemplate.h

#include <dll_defines.h>
#include <MyTemplate.h>
class MY_API Specialized; //pretend its more than just a decl.
template <> char const* MyTemplate<Specialized>::m_array[] =
{
    "Hello, World", 
    "I need help"
};

我遇到的问题是,当我尝试在另一个项目中链接DLL时,它会给我一个错误:

不允许定义dllimport静态数据成员

是否没有方法定义模板的静态数据成员并将其导出进入DLL??

好的,所以我已经意识到我实际上可以在实现文件中初始化静态模板变量。我还意识到,我不应该将导出或导入宏附加到头文件中定义的模板函数。

DONT DO THIS:
template <typename T>
MY_API void foo()
{
    cout << "This won't link, don't try it << endl
}

意识到一旦MY_API被定义为,上面就有一个非常糟糕的问题

__declspec(dllimport)