2009-09-01 7 views
0

Hehe質問のタイトルの選択に苦労しています。しかし、問題をより明確にするために私の問題について説明しましょう。クラスの機能によって制御されるクラスインスタンスの登録

私は自分のゲーム用の独自のGUIライブラリをC++で作成しています。そこにはDirectXラッパーがあります。 しかし、「マネージャ」クラスの描画機能を呼び出すだけで、ゲーム内のウィンドウをレンダリングする方法はわかりません。

たとえば、「マネージャ」と「ウィンドウ」クラスが既にあるとします。

マネージャー:

​​

ウィンドウ:

 
class MyGUIWindow 
{ 
public: 
    MyGUIWindow() 
    { 
    this->SetWindowTitle("New Window"); 
    } 
    void SetWindowTitle(char *szWindowTitle); 
    void Draw(); 
};

とメインプログラム:

 
//... 
    MyGUIManager *GUIMAN = new MyGUIManager(); 
    MyGUIWindow *FirstWindow = GUIMAN->NewWindow("Hello World"); 
    MyGUIWindow *SecondWindow = GUIMAN->NewWindow("Hello World!!!"); 
    GUIMAN->RegisterWindow(FirstWindow); // ?? 
    GUIMAN->RegisterWindow(SecondWindow); 

    while(Drawing()) 
    { 
    GUIMAN->Draw(); // I wanted this function to be able to call ALL MyGUIWindow instances' Draw() function 
    //... 
    }

ので、主な質問はMyGUIWindow変数のすべてのことが可能にする方法であり、 WindowCollectorベクトルで制御できますか?

+0

GUIMAN-> RegisterWindow(FirstWindow); // ?? GUIMAN-> RegisterWindow(SecondWindow); は、参照が必要なときにポインタを渡すように見えますが、この問題はあなたの実行中ですか? –

+0

はい!実際には、WindowCollectorの各メンバーが、RegisterWindow関数でプッシュバックされたときにtargetWindowを参照するようにしました。 –

答えて

0

はい、基本的にうまくいくでしょう。ただ試してみてください。しかし、私はループの代わりにイテレータを使用することをお勧めします。ちょうどnewの代わりに何らかの自動ポインタを使用することをお勧めします(現在の例はおそらくメモリリークの原因になります)。

実際には、グーグルで始まるstd::vector ...引数を参照として渡します。

0

質問が正しく理解されているかどうかわかりません。 MyGUIWindowのコンストラクタでRegisterWindow()を呼び出すことができます(また、デストラクタ内の同等の登録解除を呼び出します)。それはあなたの必要を満たすのだろうか?そうでない場合は、明確にしてください。

関連する問題