【发布时间】:2017-10-03 14:18:53
【问题描述】:
我正在尝试创建仅在模板被实例化时才执行某些代码的程序(它将用于低级驱动程序初始化)。 现在我有以下解决方案。
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(); 行?
【问题讨论】:
-
“强制实例化:”和“检查实例化”是两个完全不同的东西。
-
是否要为
Proxy的每个实例创建Initializer?例如。如果您创建Proxy<void>和Proxy<char>那么Initializer将被构造两次? -
不,我只想创建一个
Initializer实例。我将永远继承自Proxy<void>。
标签: c++ templates static instantiation