vector 中带有模板的 C++ 结构

标签 c++ arrays templates struct

我正在用 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/

相关文章:

c++ - opencv矩阵伪逆失败

c++ - 对齐说明符 : on the type/on the member data

c++ - 不修改输入的 std::advance 的替代品

java - 二维数组在另一个类中保存一个类的对象

xcode - 如何更改默认版权模板

templates - 自定义 MVC2 编辑器模板

c++ - 在条件语句中使用多个参数

ios - 在类 objective-c 的另一个实例中访问数组

javascript - React element - 数组对象仅返回第一项?

c++ - 根据抽象工厂中可用的重载版本自动选择构造函数