使用c ++,有没有办法让派生类继承自己的静态初始化器?我正在尝试做以下事情:
class Base {
public:
class StaticInit {
public:
virtual StaticInit() =0;
};
};
class Derived: public Base {
public:
virtual StaticInit::StaticInit() {
//do something with the derived class
}
static StaticInit init;
}
static Derived::StaticInit init;
如果我不必在每个派生类中定义init var,那也很好。我目前正在重新定义每个派生类中的StaticInit内部类,但它似乎是多余的。
每个派生类都是一个单例,我需要在程序启动时将实例存储在查找表中。
答案 0 :(得分:2)
我使用模板来做这件事,而不是继承 - 比如:
template <typename T>
struct StaticInit {
StaticInit() {
// do whatever with T
}
};
正在使用中:
static StaticInit <SomeClass> init;
答案 1 :(得分:2)
使用CRTP:
template <class D>
class Base {
public:
class StaticInit {
public:
StaticInit() { D::initStatic(*this); }
};
static StaticInit init;
};
template <class D>
Base<D>::StaticInit init;
class Derived: public Base<Derived> {
public:
initStatic(Base<Derived>::StaticInit& s) {
// Do derived-specific initialisation on s.
}
}