私はオブジェクト指向のアプローチに従ってプレーヤーのインベントリを処理するための最良の方法を考えています。
たとえば、剣と斧は2つの異なるクラスで、どちらも武器から継承しています。武器とポーションもアイテムから継承する異なるクラスです。
理想的には、在庫はアイテムのコンテナーとして実装されますが、それはいくつかの理由で実行できません。したがって、アイテム(スマート)ポインターのコンテナーである必要があります。newとdeleteの呼び出しでコードを制限したくないので、ctor / dtorでニュース/削除するItemWrapperクラスにラップします。
したがって、コードは次のようになります
class Sword;
class ItemWrapper;
//Prepare the long sword.
const Sword longSword(...params...);
//Declare the inv
vector<ItemWrapper> inv;
//Add it to inventory
inv.push_back(longSword); //compiles if ItemWraper(const Sword&) is defined.
このアプローチは、コードの明快さと書きやすさの点で私が思いつくことができる最高のものでした。問題は、ItemWrapperがItemから継承するリーフクラスごとに1つのコンストラクターを必要とすることです(これはたくさんあります)。
これが私の初めての試みなので、知りたいのですが、正しい方向に進んでいますか?またはそれを行うためのより良い方法がある場合(おそらく、非常に多くのコンストラクタを回避する方法)?