静态初始化派生类

时间:2010-05-15 12:25:45

标签: c++

使用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内部类,但它似乎是多余的。

每个派生类都是一个单例,我需要在程序启动时将实例存储在查找表中。

2 个答案:

答案 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.
    }
}