インスタンス操作や派生クラスの関与なしで静的メンバーの初期化を強制する方法
静的クラスを初期化するシナリオを考えてみましょうインスタンスを作成したり、派生クラスを関与させたりしなくても、特定のクラスがインスタンス化されるときのメンバー。これを達成するための戦略を検討してみましょう。
テンプレート トリックの使用
テンプレート トリックを導入すると、インスタンスを必要としたり、派生クラスを変更したりせずに、静的メンバーの初期化を強制できます。整数参照とその値をパラメータとして受け取る value と呼ばれる特殊なテンプレート クラスを作成することで、目的の結果を得ることができます。
<code class="cpp">template<typename T, T> struct value { }; template<typename T> struct HasStatics { static int a; // We enforce initialization typedef value<int&, a> value_user; }; template<typename T> int HasStatics<T>::a = /* Desired side-effect */;</code>
構文の曖昧さを悪用する
もう 1 つのアプローチは、C 構文の曖昧さを利用することです。 typedef とネストされた列挙型をうまく組み合わせて使用すると、派生クラスに影響を与えることなく、複数の静的メンバーの初期化を強制できます。
<code class="cpp">template<typename T, T> struct var { enum { value }; }; typedef char user; template<typename T> struct HasStatics { static int a; // We enforce initialization static int b; // And this one too // Syntax Shenanigans user :var<int&, a>::value, :var<int&, b>::value; }; template<typename T> int HasStatics<T>::a = /* Desired side-effect */; template<typename T> int HasStatics<T>::b = /* Desired side-effect */;</code>
これらの手法は、インスタンス操作を必要とせずに静的メンバーを初期化するための効率的な方法を提供します。または派生クラスの変更。
以上がCでインスタンスや派生クラスを使用せずに静的メンバーを初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。