有一个基类:

template<class T_CLASS>
class TBase
{
  protected:
    static CSomeClass m_objSomeClass;

  public:
    inline void Set(CSomeClass f_objSomeClass) { m_objSomeClass = f_objSomeClass; }
};

还有一些子类,它们都应具有自己的静态成员m_objSomeClass。我尝试通过模板化基类来做到这一点。
class CSub1 : public TBase<CSub1>
{
   //...
};

class CSub2 : public TBase<CSub2>
{
  //...
};

这个的定义是什么样的?可能吗?我尝试了一些...但是没有用:
template<class T_CLASS>
CSomeClass TBase<T_CLASS>::m_objSomeClass;

//In fact the next one worked in Visual Studio;
// but not in with the armcc where I need it.
CSomeClass TBase<CSub1>::m_objSomeClass;
CSomeClass TBase<CSub2>::m_objSomeClass;

有什么建议?谢谢,Mirco

最佳答案

template<>
CSomeClass TBase<CSub1>::m_objSomeClass;
template<>
CSomeClass TBase<CSub2>::m_objSomeClass;

如果要为诸如staticCSub1的实体类明确定义CSub2成员,则这是正确的方法之一。 Demo

编辑:常规方法是定义为:
template<class T_CLASS>
CSomeClass TBase<T_CLASS>::m_objSomeClass;

两种方式都可以达到目的。

10-08 11:51