使用CRTP

时间:2018-06-07 18:52:46

标签: c++ static crtp

所以我使用CRTP这个类层次结构:

template <class T>
class A { 
  static Object x;
  static OtherObject y;
}

class B : public A<B> {
}

class C : public A<C> {
}

最初的想法是B和C不共享x和y的实例,因为A<B>A<C>被认为是单独的类。但是假设为了节省资源,确定'x'应该是B和C共享的单例实例,同时仍然为每个派生类创建'y'的实例。有没有办法做到这一点?

提前致谢。

1 个答案:

答案 0 :(得分:3)

您可以使类模板派生自另一个类。在基类中定义x

class ABase { 
  static Object x;
};

template <class T>
class A : public ABase { 
  static OtherObject y;
}

class B : public A<B> {
}

class C : public A<C> {
}