使用 CRTP 进行选择性静态成员继承

Selective static member inheritance with CRTP

本文关键字:静态成员 继承 选择性 行选 CRTP 使用      更新时间:2023-10-16

所以我有这个使用 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"的实例。有没有办法做到这一点?

提前谢谢。

可以使类模板派生自另一个类。 在基类中定义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> {
}