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

时间:2014-10-10 03:08:26

标签: c++ templates

所以我目前正在导出一个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 ??

1 个答案:

答案 0 :(得分:0)

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

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

一旦MY_API被定义为

,就意识到上面的问题非常严重
__declspec(dllimport)