2016-10-20 1 views
0

私のコードでは、プログラムのプロセスがアクティブ化されると初期化する必要がある非常に多くの異なるクラスを実装しています。クラスを初期化するためのC++のパターン

私は現在、各クラスを手作業で開始していますが、非常に多くのクラスから継承でき、作成された各オブジェクトはベクターに保存され、作成されたオブジェクト(基本クラス)からクラスを初期化できますしかし、私はクラスを一度初期化する必要があります。そのフラグを設定することはできますが、私はそれを良い解決策とは考えていません。

私が考えている他の解決策は、初期化(イニシャライザ)の各クラス(静的変数)を実装することです。しかし、私はそのオブジェクトに多くのパラメタや関数を渡す必要があります。 良いソリューションですが、実装が悪いと思っています。

あなたはクラスを初期化するための良いパターンを知っていますか?

EDIT例:アンドロイドとOpenGL、アプリがOnResume(ない各時間)で

は、OpenGLコンテキストが破壊され、そしてOnResume()コンテキストを再作成し、I任意のオブジェクトのレンダリングする必要があります。私はスクエアを描画する 'Square class'のようなクラスを持っています。各スクエアオブジェクトに対して、 'Square class'には静的変数があり、各スクエアにはバッファやシェーダなど、コンテキストが再作成されるたびに、オブジェクトをレンダリングするためにクラス静的変数を再初期化する必要があります。

+2

私はあなたが何を意味するのかを理解することができません。終わりには、クラスの唯一の有用なオブジェクトは、コードで使用する(したがってタイプする)ものです。その時点で、なぜオブジェクトを手で初期化しないのですか? –

+0

@space_voyager私はEDIT – quetzalfir

答えて

1

C++での初期化のための標準パターンは、ニフティカウンタパターンです。 http://www.petebecker.com/js/js199905.htmlを参照してください。まとめると、ヘッダーファイルでは、コンストラクターを使用してオブジェクトを定義するので、このコンストラクターはヘッダーファイルを含む各.cppに対して一度だけ実行されます。このコンストラクタは、グローバル共有カウンタをインクリメントします。カウンタが0から1になると、初期化コードが実行されます。同様に、同じファイル内、デストラクタは、カウンタをデクリメントし、デ初期化したりものを破壊し、それが1から0

に行くとき、これはということです初期化の順序についてのみC++保証、とうまく動作しますが、、オブジェクトが構築され、上から下に初期化されます。ヘッダファイルを介して複数の.cppが参照されている場合、最初に初期化されるものはヘッダに定義され、初期化が必要なものは他には何も含まれていません。

1

たぶん私はこの完全に間違って取得するが、少なくともJavaの世界では、このトピックを解決する一つの方法は、上のベース、あなたのオブジェクトをinit'ting の世話を枠組み経由依存性の注入を使用することです設定情報を入力する必要があります。

意味:実際の「ビジネスロジック」と「必要なオブジェクトをすべて確立する」タスクを完全に分離します。あなたはあなたのコードでもう "新しい"ことをしません。すべての重要なオブジェクトはあなたのために "魔法"によって作成されます。

このようなC++のフレームワークの例は、実際にはGoogleのguice javaのものに触発されたfruitです。

関連する問題