テンプレートがインスタンス化されている(低レベルのドライバの初期化に使用される)場合にのみ、いくつかのコードを実行するプログラムを作成しようとしています。 私は以下の解決策を持っています。テンプレートの静的メンバーのインスタンス化を強制する
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();
?
「インスタンス化の強制:」と「インスタンス化の確認」は、2つの方法が異なります。 –
'Proxy'のインスタンスごとに' Initializer'を作成しますか?例えば。 'Proxy'と 'Proxy 'を作成すると、 'Initializer'が2回構築されますか? –
Pavel
いいえ、「Initializer」のインスタンスを1つだけ作成します。私はいつも 'Proxy'から継承します。 –
valentin