パート1:私は非常に奇妙な状況にあります。そこでは、main()の前、またはmain()に入るとすぐに呼び出されるいくつかのクラスのコンストラクターを取得する必要があります。このサブシステムのデータをできるだけ早くmain()で開始する必要がある別のサブシステムがあり、この概念をより便利に見せるためにさらに多くのものがあります。
ここには2つのアプローチがあります。
main()の前にグローバルオブジェクトを使用します。
main()の最初の行で静的クラス定義を使用します。
もう1つのアイデアは、(gccを使用しているので)attribute __constructor__
gcc予約関数を使用することです。
あなたは何を提案しますか?
パート2:この問題をさらに追加するには、これらのクラスの開発を切り離す必要があります(これはコードベースの設計の問題です)。
つまり、誰かがclassAを作成し、他の誰かがclassBを作成している場合、 classAとclassBを含む2つの別個のファイルが定義され、ファイル/モジュール内で独自のコンストラクターが呼び出されます。
これは私の考えを説明するサンプルコードです:
class Init_myclass
{
public:
Init_myclass(): myvar(10)
{
std::cout << __PRETTY_FUNCTION__ << ":" << myvar << std::endl;
};
private:
int myvar;
};
static Init_myclass TestInit; //Initializing object prior to main
int main ()
{
std::cout << __PRETTY_FUNCTION__ << std::endl;
//Use the data populated by the Init_myclass constructor
return 0;
}
上記のコードで、Init_myclassをclassA、classBなどの数百のクラス定義に置き換えます。
もう1つのアプローチは、ファイル内の単一のコンストラクターを使用して、他のファイルで定義されている複数のクラスコンストラクターを内部から呼び出すことです。
これが私の考えを理解するのに役立つかもしれないサンプルコードです:
class InitializeOne
{
public:
InitializeOne(): myvar(10)
{
std::cout << __PRETTY_FUNCTION__ << ":" << myvar << std::endl;
A bunch of constructors of other classes here();
classA();
classB();
....
};
private:
int myvar;
};
int main()
{
static InitializeOne TestInit;//Object after main
... //functions depending on data populated by Initialize constructor
}
クラスの初期化順序は重要ではありませんが、mainの前、またはmainに入るとすぐに初期化する必要があります。
どのデザインがより好ましいのか、そしてその理由は?
私の質問を理解できるようにしたいと思います。そうでない場合は、私が見逃した、または過度に単純化/複雑化した情報などを知らせてください。
お返事と時間をありがとうございました。