我正在尝试类似以下的事情:
struct MyType { };
template <typename T>
struct Test
{
static const MyType * const sm_object;
};
template <>
struct Test<void>
{
static const MyType * const sm_object;
};
template <typename T> const MyType * const Test<T>::sm_object = new MyType();
template <> const MyType * const Test<void>::sm_object = new MyType();
我将其包含在 2 个文件中 - a.cpp 和 b.cpp。我尝试编译并获得:
error C2998: 'const MyType *Test<void>::sm_object' : cannot be a template definition
我认为我的 C++ 语法不好,但我想不出我做错了什么。
我无法template<>
从变量定义中删除 ,因为我需要在多个翻译单元中使用它,这会导致链接错误。
我可以将该字段放入基类并使用 CRTP 为每种类型创建一个新实例,然后专业化就不会妨碍,但为什么这种“直接”字段初始化不起作用?我一定遗漏了一些语法。
我正在使用 VS2003 :(