静的メンバーを明示的に初期化する方法
質問:
C では、静的メンバーはテンプレート クラスは、具体的なインスタンス化内で明示的に使用される場合にのみ初期化されます。インスタンスを作成したり、ユーザーにメンバーを直接指定させたりせずに、強制的に初期化する方法はありますか?
回答:
はい、強制的に初期化することができます。次のいずれかの手法を使用して静的メンバーを初期化します:
ラッパー型の使用:
<code class="cpp">template<typename T, T> struct value { }; template<typename T> struct HasStatics { static int a; // we force this to be initialized typedef value<int&, a> value_user; }; template<typename T> int HasStatics<T>::a = /* whatever side-effect you want */ 0;</code>
構文トリックの使用:
<code class="cpp">template<typename T, T> struct var { enum { value }; }; typedef char user; template<typename T> struct HasStatics { static int a; // we force this to be initialized static int b; // and this // hope you like the syntax! user :var<int&, a>::value, :var<int&, b>::value; }; template<typename T> int HasStatics<T>::a = /* whatever side-effect you want */ 0; template<typename T> int HasStatics<T>::b = /* whatever side-effect you want */ 0;</code>
どちらの手法も、メンバーの定義の評価をトリガーする依存関係を導入することで、静的メンバーの初期化を強制します。 2 番目の手法には型破りな構文が含まれるため、すべてのケースに適しているわけではないことに注意してください。
以上がインスタンス化せずにテンプレート クラスの静的メンバーを強制的に初期化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。