我正在用 C++ 制作一款文字冒险游戏。这是该游戏中对象的结构(用户可以拾取并放入库存的东西)
template <int N>
struct Object
{
static const int length = N;
string names[N];
string description;
};
对象示例:
Object<2> flower = { {"flower", "the flower"}, "A strange looking flower"};
Object<3> book = { { "the book", "book", "recipe book" }, "The world's finest cocktail recipes now all in one easy to use companion." };
多个名称是命令解析器的同义词,因此用户可以输入“pick up book”或“pick up recipe book”,在这两种情况下都将拾取对象书。
现在我想创建一个 vector 库存来存储库存中的所有元素。
vector<Object> inventory;
现在,当然,这给了我一个编译器错误,因为它需要这样的东西:
vector<Object<5>> inventory;
但是,有些对象的名称比其他对象多,这样的事情可能吗?如果可能,怎么办?
vector<Object<N>> inventory;
最佳答案
你所有的不同Object<N>
类是具有不同大小的不同类型。您不能将它们放在一个同质容器中。
您需要一些基类或基接口(interface),并在 vector 中存储指针,在提取元素时依赖于虚拟分派(dispatch)和多态性。这将使您的容器成为 Object
是一个异构容器。
或者,最好是,删除模板并将名称存储在成员容器中:
struct Object
{
set<string> names;
string description;
};
vector<Object> easy;
附言。我不考虑Object
成为任何类(class)的好名字。 CompuChip InventoryItem
的建议更有意义。
关于 vector 中带有模板的 C++ 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659984/