模板类静态成员的继承有关问题
模板类静态成员的继承问题问题一共涉及到3个类:A,B,C,其中A、B是模板类,B继承自A,C继承自B,而且A有一个静态
模板类静态成员的继承问题
问题一共涉及到3个类:A,B,C,其中A、B是模板类,B继承自A,C继承自B,而且A有一个静态成员
相关定义如下:
C/C++ codetemplate<class T>class A{ static T* m_static;}template<class T>class B : public A<B<T>>{}class C : public A<D> //D是另外一个类,与此问题无关{}
问题就出在m_static的初始化上
template<> C* B<D>::m_static=0; //出错
template<> B<D>* A<B<D>>::m_static=0; //出错
或者在B类中重新声明为 B<T>* m_static; 还是出错
我试了N种方式几乎都是一样的错误:重复定义,基类不一样
于是我妥协了,让B独立存在,C则继承自A和B,然后初始化改为template<> C* A<C>::m_static=0;就行了
虽然问题可以换种方式解决,但我还是想知道用之前的方式应该怎样初始化m_static
[解决办法]大道至简,把代码写成这样其实没什么用。
“重复定义,基类不一样”的意思是:你声明的数据类型和实际的数据类型不一致。
比如:template<> C* B<D>::m_static=0; 这里m_static的实际类型是B<D>*,而你想声明的类型是C*,其余都类似。
你最后的一个template<> C* A<C>::m_static=0;这里m_static类型是C×,你要声明的类型也是C*所以就对了。
可以在类A定义m_static时初始化template<class T> T *A<T>::m_static = NULL;
因为是静态成员,也可以不要写声明的类型直接写:B<D>::m_static=0;或者A<B<D>>::m_static=0;
[解决办法]T* A<T>::m_static=0;
[解决办法]