Я пытаюсь что-то вроде следующего:
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: (