オブジェクト指向プログラミングでは、静的データ メンバーはクラスのすべてのインスタンス間で共有されます。通常、これらはインスタンス コンストラクター内で初期化されます。ただし、インスタンス コンストラクターに依存せずに静的データ メンバーを設定したい場合はどうすればよいでしょうか?
静的コンストラクターの動作をエミュレートするには、静的データをカプセル化する別のクラスを作成します。たとえば、次のクラスについて考えてみます。
class C { // read-only, can also be static const // should be filled with all characters from 'a' to 'z' static std::vector<char> alphabet; public: C() { /* ... */ } };
これを実現するには、別の通常のクラス内で静的データを定義します。
class StaticStuff { std::vector<char> letters_; public: StaticStuff() { for (char c = 'a'; c <= 'z'; c++) { letters_.push_back(c); } } };
次に、このクラスの静的インスタンスをクラス内に作成します。元のクラス:
class Elsewhere { static StaticStuff staticStuff; // constructor runs once, single instance };
StaticStuff クラスの静的インスタンスを作成すると、基本的に Elsewhere クラスのインスタンスが作成される前に静的データ メンバーを初期化し、静的コンストラクターの機能を効果的に模倣します。
以上がインスタンスコンストラクターを使用せずにCで静的データメンバーを初期化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。