質問掲示板で「GameContext」で検索すると、こちらがヒットします。クラス間でのデータの受け渡しについて
僕が質問した際のご回答はこちらです。
これで分かればいいのですが、実装で困りました。そこで、自分のコードで試そうとしました。クラスの上下関係はこんな感じです。
GameParent
- MapManager
- MapDrawer
- MapData etc.
- MapObjectsManager
- ActorsManager
- ActorsList etc.
- ItemAndTrapManager
- BGMManager
- InputManager
MapData* data = GetGameContext()->GetMapContext()->GetMapData();
data->GetMapSize( &width, &height );
...
GameParentの下につくオブジェクト(Map, MapObjects, BGM, Input)をどのContextに入れるか。
例えばMapManagerオブジェクトをGetGameContext()->GetMapManager()として得るか、
GetGameContext()->GetMapContext()->GetMapManager()と書いて得るようにするか。
■問題点
1.誰がオブジェクトの所有権(deleteする責任の意味)を持つか、
いつ誰がContextにポインタを持たせるか、
誰がContextの所有権を持つか
2.Contextから得られるオブジェクトのインタフェイスは、なるべくGet系のみにしたい。
実装例:Contextだけ、GameContextをコンストラクトした時に最下層まで生成する。
Context::Set(オブジェクトへのポインタの引数)で、オブジェクトへのポインタを渡す。
GameParentがGameContextを持つ。
問題点:誰でもポインタをセットしてしまえる
下層のオブジェクトが多いほど、Setの引数が増えて面倒くさい
ここまで考えました。この案はISLeさんの考えられているGameContextを実装するものとしてふさわしいでしょうか。