Я нашел два решения.Ни один из них не является на 100% тем, на что я надеялся.
Явная инициализация конкретного экземпляра, например
int * MyClass<int>::staticPointerObject = NULL;
Это не удобноособенно когда у меня много разных типов.
Обернуть указатель внутри класса, например
template < class T >
class MyClass
{
private:
struct PointerWrapper
{
T * pointer;
PointerWrapper( void )
: pointer( NULL )
{ }
};
T staticObject;
PointerWrapper staticPointerObject;
};
...
template < class T >
T MyClass<T>::staticObject; // <-- works fine.
...
template < class T >
MyClass<T>::PointerWrapper MyClass<T>::staticPointerObject; // <-- works fine.
Это немного хлопотно, но по крайней мере пригодно для использования.Почему я могу создать экземпляр объекта переменной, но не указатель на объект переменной?Во всяком случае, я думаю, что у меня было бы больше проблем с другой стороны (компилятор заранее знает, как выглядит указатель, но не как мой объект).
Если у кого-то есть лучший ответ, яОчень хотелось бы увидеть это!