【发布时间】:2020-09-30 03:27:48
【问题描述】:
我已经阅读了该网站上的几篇文章,但我仍然无法弄清楚创建来自不同派生类的对象 std::vector 的正确方法是什么。
我创建了一个类Column:
template <typename T> class Column {
public:
Column();
virtual ~Column();
vector<T>& getData();
string getName();
virtual string getType();
protected:
string _name;
vector<T> _data;
};
以及许多不同的派生类,例如:
class IntColumn : public Column<int> {
public:
IntColumn();
IntColumn(string name);
~IntColumn();
vector<int> & getData();
void addElement(int elem_to_add);
string getType();
private:
// ...
};
我现在需要做的是创建一个列向量,它可以是IntColumns、FloatColumns 等...
(在我的脑海中,它可能类似于vector<Column> vect;,但我不能这样做,因为 Column 是一个模板类。)
我的最后一个问题是:哪种方法是正确的?
【问题讨论】:
-
保留一个指向基类的指针向量,并插入派生类的实例。
-
所有派生类都将继承
Column的同一个实例化,还是可以不同? -
你可以有一个普通类作为Column的基类。将基类中的虚函数放到Column中。
-
你不能创建不同对象的向量,这根本不是 C++ 的工作方式。正如@Ron 指出的那样,您只能拥有一个指向基类的指针向量。
标签: c++ c++11 templates inheritance stl