C : 模板类的向量

新手上路,请多包涵

我有一个名为 Cell 的模板类,如下所示:-

 template<class T>class Cell
{
    string header, T data;
}

现在我想要另一个名为 Row 的类。 Row 将有一个名为 Cells 的向量,这样我就可以将 Cell 和 Cell 类型的元素添加到该向量中。可能吗?

如果是这样,我该怎么做?提前致谢。

原文由 Jakir Hossain 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 635
2 个回答

使用您提供的额外细节,前两个答案将不起作用。您需要的是一种称为单元变体的类型,然后您可以拥有这些类型的向量。例如:-

 enum CellType
{
  Int,
  Float,
  // etc
};

class Cell
{
  CellType type;
  union
  {
    int i;
    float f;
    // etc
  };
};

class Vector
{
  vector <Cell> cells;
};

然而,添加新类型是一件很痛苦的事情,因为它需要大量代码来维护。另一种方法可以使用具有公共基类的单元格模板:-

 class ICell
{
  // list of cell methods
};

template <class T>
class Cell : public ICell
{
  T data;
  // implementation of cell methods
};

class Vector
{
  vector <ICell *> cells;
};

这可能会更好,因为您最初更新的代码较少以添加新的单元格类型,但您必须在单元格向量中使用指针类型。如果您按值存储单元格 vector <ICell> ,那么您将由于 对象切片 而丢失数据。

原文由 Skizz 发布,翻译遵循 CC BY-SA 3.0 许可协议

另一个答案很好,但您可能想要:

 template<class T>
class Row
{
private:
    class Cell {
        string header;
        T data;
    }

    std::vector<Cell> cells;
    ...
}

原文由 Elazar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏