プライベートな静的データ メンバーを持つクラスを作成したい:
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() { /* ... */ }
};
Java または C# では、クラスのインスタンスを作成する前に実行される「静的コンストラクター」を作成し、クラスの静的データ メンバーを設定することができます。これは 1 回だけ実行され (変数は読み取り専用であり、1 回だけ設定する必要があるため)、クラスの関数であるため、プライベート メンバーにアクセスできます。
コンストラクターに、ベクターが初期化されているかどうかを確認し、初期化されていない場合は初期化するコードを追加することもできますC()
が、これには多くの必要なチェックが導入され、問題に対する最適な解決策とは思えません。
メンバーは読み取り専用なので、static const
クラスの外部で定義することもできますが、それは醜いハックのように思えます。
インスタンス コンストラクターで初期化したくない場合、クラス内にプライベート静的データ メンバーを持つことは可能ですか?
ベストアンサー1
静的コンストラクターと同等のものを取得するには、静的データを保持する別の通常のクラスを記述し、その通常のクラスの静的インスタンスを作成する必要があります。
class StaticStuff
{
std::vector<char> letters_;
public:
StaticStuff()
{
for (char c = 'a'; c <= 'z'; c++)
letters_.push_back(c);
}
// provide some way to get at letters_
};
class Elsewhere
{
static StaticStuff staticStuff; // constructor runs once, single instance
};