2011-02-05 7 views
0

私は、複数のプロジェクトに分割された(C++で)ゲームエンジンを構築しています(Windows上のdllとlibsを分離してコンパイルしています。複数のDLLがお互いを "main" dllで機能しています

        Main.exe 

            Engine.dll 

      Graphics Engine.dll Physics Engine.dll Sound Engine.dll ...dll 

Main.exeは新しいエンジンを初期化し、エンジンはグラフィックス、物理エンジン、サウンドエンジンを作成します。これはすべてうまく動作しますが、私は現在、サウンドエンジンに存在する機能を実行するが、直接代わりにEngine.dllの機能を介して機能するように、例えばグラフィックスエンジンを必要としています。

ただし、問題があります。メインにはエンジン、エンジンにはグラフィック、物理、サウンドが含まれます。 Graphics、Physics、Soundにエンジンを組み込み、それぞれの "サブエンジン"にエンジンオブジェクトのリファレンスを渡すと、循環依存性に問題があります。

Graphics、Physics (メインエンジンがサブエンジンのすべての機能を呼び出す一方向の関係になっています)。

答えて

1

Engine.dllの抽象クラス(つまり純粋な仮想関数を使用)を使用してインターフェイスを公開できます。次に、このインターフェイスをEngine.dllに実装します。次に、このクラスのインスタンスを作成し、このインスタンスの参照/ポインタ(抽象クラ​​ス参照/ポインタとして)をGraphicsEngine.dllに渡します。今度は、GraphicsEngineがEngineと通信する必要があるときはいつでも、このインスタンスを使うことができます。抽象クラスだけを使用しているので、GraphicsEngine.dllEngine.dllにリンクする必要はありません。したがって、循環依存は存在しません。

関連する問題