シナリオは、テクスチャの読み込みと管理を担当する TextureManager クラスを使用してゲームを構築しています。IVisibleGameObject を実装するゲーム オブジェクトには、TextureManager からのテクスチャへのポインタ/参照が必要です。
テクスチャ マネージャは、std::map<std::string, boost::shared_ptr<Texture> >
そのオブジェクトを内部に保持するために で実装されます。
テクスチャを実際に公開する方法がよくわからないので、いくつかの可能性を考えましたが、それぞれに欠点があります。
1)const Texture& GetTex(std::string textureKey)
理想的だと思いますが、NULL を返すことでマップ内にテクスチャが見つからなかったことを示したいと思います。(自分で推測する...これは適切ですか?)
2)shared_ptr<const Texture> GetTex(std::string textureKey)
ここでは、null の shared_ptr を返すことができますが、現在は共有オブジェクトであるという意味に不快感を覚えます。TextureManager はオブジェクトの所有者であり、結局のところマネージャーです。しかし、IVisibleGameObject が返された Texture への参照/ポインターを保持し、正しく機能するためにその存在に依存しているという事実を考慮すると、それはオブジェクトの所有者でもなく、共有所有権が適切ではないでしょうか?
3)const Texture* GetTex(stD::string textureKey)
明らかに、これは間違った答えです。
誰かが私のためにこれを片付けてくれることを望みます.おそらく私が考えていないことがあります.