我想允许一个类从基础CRTP类继承,该类导致在main()开始之前创建并运行全局构造函数。我的想法是使用它在一些地图中注册一个类型,以便稍后查找。似乎这只有在我实际实例化Derived类的成员并使用Base类时才有效。
#include <iostream>
class Foo {
public:
Foo() { std::cout << "Foo" << std::endl; }
};
template <typename T>
class Bar {
private:
static Foo foo_;
};
class Test : public Bar<Test> {
};
int main() {
return 0;
}
类Test
继承自Bar<Test>
,它具有类型为Foo
的静态成员变量。不幸的是,Foo
的构造函数未被调用。我希望能够在类使用CRTP实例化模板时运行全局构造函数,而无需实际创建该类的实例。我也很乐意使用依赖于实现的解决方案。
答案 0 :(得分:0)
除了SomeClass instance
之外,翻译单元中没有办法拥有全局类实例。
使用模板和静态成员,您可能(或可能不会)在多个翻译单元中使用全局变量。
答案 1 :(得分:0)
如果使用静态字段声明一个类,它是否由模板驱动无关紧要 - 除非您创建此类的实例,否则不会实例化静态成员。请注意 - 静态成员实例化的时间非常棘手,特别是如果您涉及多个库。