ホームページ  >  記事  >  バックエンド開発  >  Cでインスタンスや派生クラスを使用せずに静的メンバーを初期化するにはどうすればよいですか?

Cでインスタンスや派生クラスを使用せずに静的メンバーを初期化するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 10:18:30713ブラウズ

How to Initialize Static Members Without Instances or Derived Classes in C  ?

インスタンス操作や派生クラスの関与なしで静的メンバーの初期化を強制する方法

静的クラスを初期化するシナリオを考えてみましょうインスタンスを作成したり、派生クラスを関与させたりしなくても、特定のクラスがインスタンス化されるときのメンバー。これを達成するための戦略を検討してみましょう。

テンプレート トリックの使用

テンプレート トリックを導入すると、インスタンスを必要としたり、派生クラスを変更したりせずに、静的メンバーの初期化を強制できます。整数参照とその値をパラメータとして受け取る 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。