【发布时间】:2014-10-10 03:08:25
【问题描述】:
所以我目前正在导出一个 DLL,我遇到了一个问题,我有一个包含静态 char*[] 成员变量的模板类。我想为该模板的专业化定义它。
示例:
我的模板.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中??
【问题讨论】:
-
你使用什么编译器?又为什么要在头文件中定义你的静态数据成员?
-
我使用的是 Visual Studio,所以是 MSVC。此外,根据我的理解,模板必须在头文件中定义。我假设模板类中包含的静态数据成员也需要。通常,类的静态数据成员在定义中初始化,.cpp 文件,但我不知道该怎么做,因为它是一个模板。
-
显式特化实际上不是模板。所以它们应该只在头文件中声明。