我有一段代码在启动应用程序时自动为类运行一个函数:
template<class T> struct RegClass;
template <typename T>
struct AutoRegister {
AutoRegister() { (void)&ourRegisterer; }
private:
static RegClass<T> ourRegisterer;
};
template <typename T>
RegClass<T> AutoRegister<T>::ourRegisterer;
template<class T>
struct RegClass {
RegClass() {
printf("registering\n");
}
};
要将它用于课程,我只需继承AutoRegister<T>
:
struct Foo : AutoRegister<Foo>{
Foo() {}
};
在此示例中,即使没有设置Foo
类型的对象,应用程序也会打印出“注册”。 http://coliru.stacked-crooked.com/a/fc1678b1a18e8971
但是,似乎需要定义Foo
的构造函数来观察此行为。隐式构造函数或继承基类的构造函数是不够的:http://coliru.stacked-crooked.com/a/a54c53afe2724cdf
感谢您关联What are rules for a class static variable initialization?
我看了一下继承构造函数,并且它们具有与隐式构造函数相同的“定义时使用”规则,这也解释了该部分