私はゲームエンジンを構築しています。私はいくつかのことを再構成しようとしています。すなわち、エンジンの主なコンポーネント(オーディオ、ビデオ、キーボード/マウスIOなど)を管理するEngineManager
です。複数のサーバーが間違ったデザインを指しているクライアントを使用していますか?
あなたがする場合は、これは、をクリーンアップのための主要な実装のアイデア、順番にメッセージを送るであろう、これらの様々な構成要素にイベント処理(SDL中)を介してデータを送信するクライアントとしてEngineManager
を使用することですバック。狂気を避けるために、私は次の実装を持っている:
コンフィグ
class Config
{
public:
Config(const EngineManager* engine, const Controls* controls);
~Config(void);
//More functions
private:
Controls** mControls;
EngineManager** mEngine;
//More functions/class members
};
Config::Config(const EngineManager* engine, const Controls* controls)
: mControls(controls),
mEngine(engine),
mIsInitialized(false)
{
}
Config::~Config(void)
{
delete mControls;
delete mEngine;
}
EngineManager
class EngineManager
{
public:
EngineManager(void);
~EngineManager(void);
//More functions/class members
private:
Controls* mControls;
Config* mConfig;
//More functions/class members
};
EngineManager::EngineManager(void)
: mControls(new Controls(this)),
mConfig(new Config(this, mControls)),
mEvent(new SDL_Event)
{
Init();
}
EngineManager::~EngineManager(void)
{
delete mEvent;
delete mConfig;
delete mControls;
delete mScreen;
}
私がコントロールを投稿するだろうが、それは基本的に設定と同じことを行いクラス - ただし、configへの参照なし。
それでも、何かが
...良い実装がある種の関数ポインタであるかもしれないことに任意のアイデアを私に語りましたか?
RAII用の良いスマートポインタを使用して何が起こったのですか。 –
私はそれを行うことができましたが、この種の通信を処理する関数ポインタはどうでしょうか?ややシンプルなようです。 – zeboidlund
'Config'コンストラクタの' const EngineManager * 'から' EngineManager ** 'への変換(または' Controls'を使った同様の変換)はどうしますか? – Mankarse