我正在尝试创建仅在模板被实例化时才执行某些代码的程序(它将用于低级驱动程序初始化)。 现在我有以下解决方案。
class Initializer
{
public:
Initializer(){
// This code is executed once
}
void silly() const{
}
};
template <class T>
class Proxy{
protected:
static const Initializer init;
};
template<class T>
const Initializer Proxy<T>::init;
template<class T>
class MyTemplate : public Proxy<void>{
public:
static void myMethod1(){
init.silly();
// ... Something useful
}
static void myMethod2(){
init.silly();
// ... Something useful
}
};
Initializer
默认构造函数仅在我在某处调用 myMethod1()
或 myMethod2()
时执行。
但是有没有办法摆脱那些 init.silly();
行?
最佳答案
您的问题是,除非引用模板的成员,否则它们不会被实例化。
无需调用 init.silly()
,您只需引用成员即可:
static void myMethod1(){
(void)init;
// ... Something useful
}
或者,如果您希望绝对始终定义 init
,您可以显式实例化它:
template<>
const Initializer Proxy<void>::init{};
关于c++ - 强制模板静态成员实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43799201/