我試圖創建程序,只有當模板被實例化時(它將用於低級驅動程序初始化)纔會執行一些代碼。 現在我有以下解決方案。強制模板靜態成員實例
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'和'Proxy ',那麼'Initializer'會被構造兩次? –
Pavel
不,我只想創建一個'Initializer'實例。我將永遠繼承'代理'。 –
valentin