c++ - 带有模板基类的静态成员定义

标签 c++ templates static-members derived-class

有一个基类:

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;

有什么建议吗?谢谢,米尔科

最佳答案

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

是正确的方法之一,如果您想明确地为 CSub1CSub2 等实体类定义 static 成员。 Demo .

编辑:常规方式是定义为:

template<class T_CLASS>
CSomeClass TBase<T_CLASS>::m_objSomeClass;

两种方式都能达到目的。

关于c++ - 带有模板基类的静态成员定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6841632/

相关文章:

c++ - 尝试只插入单词的第一个字母,而不是整个单词

c++ - 外部变量与静态变量的持续时间

c++ - 特殊类模板的类外构造函数定义

Java线程不共享静态数据

c++ - 将 C++ 程序的值返回到 bash 脚本

c++ - IIS 6 Isapi 过滤器 - 将请求转发或重定向到其他域

c++ - 函数指针作为模板参数,类型推导失败

c++ - Visual C++ 无法推断在 ctor 中用作默认值的函数的给定(!)模板参数

c++ - 初始化静态成员类(用于信号处理程序)

c++ - 模板静态成员初始化顺序