val*_*tin 6 c++ static templates instantiation
我正在尝试创建仅在模板实例化时执行某些代码的程序(它将用于低级驱动程序初始化).现在我有以下解决方案.
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
}
};
Run Code Online (Sandbox Code Playgroud)
该Initializer默认构造函数只在情况下,我呼吁执行myMethod1()或myMethod2()地方.
但有没有办法摆脱这些init.silly();线?
您的问题是,除非引用模板的成员,否则不会实例化它们。
init.silly()您可以只引用该成员,而不是调用:
static void myMethod1(){
(void)init;
// ... Something useful
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您希望init绝对始终被定义,则可以显式实例化它:
template<>
const Initializer Proxy<void>::init{};
Run Code Online (Sandbox Code Playgroud)