У меня есть система классов, которая наследуется от шаблона, который сам наследует от Singleton.
Проблема в том, что статический член * ms_Singleton * не может быть правильно связан в специализированной версии моего класса,И я получил следующую ошибку:
ошибка LNK2001: неразрешенный внешний символ "защищен: статический класс MyBase * Singleton> :: ms_Singleton"
Мой код:
template <typename T>
class Singleton
{
protected:
static T* ms_Singleton;
public:
Singleton( void )
{
ms_Singleton = static_cast< T* >( this );
}
static void init(void){};
static T& getSingleton( void )
{ assert( ms_Singleton ); return ( *ms_Singleton ); }
};
template <class T>
class MyBase : public Singleton< MyBase<T> >
{
public:
MyBase()
{
}
};
/*template <class T>
MyBase<T>* Singleton< MyBase<T> >::ms_Singleton = 0;*/
class MySpecialized : public MyBase<MySpecialized >
{
public:
MySpecialized()
{
}
};
template <>
MySpecialized* Singleton<MySpecialized>::ms_Singleton = 0;
int main()
{
MySpecialized t;
}