我已经在该网站上阅读了几篇文章,但是我仍然不知道从不同的派生类创建对象的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:
// ...
};
我现在需要做的是创建一个列 vector ,它可以是
IntColumn
,FloatColumn
等等。(在我的脑海中,它就像
vector<Column> vect;
一样,但是我不能这样做,因为Column是模板类。)我的最后一个问题是:哪种方法正确?
最佳答案
首先,您缺少基类。 Column
是模板,而不是类,并且在模板内部包含虚拟方法很少有用。
class Column {
public:
Column();
virtual ~Column() {}
std::string getName() const { return _name; }
virtual std::string getType();
protected:
std::string _name;
};
template <typename T> class ColumnImpl : public Column {
public:
ColumnImpl();
std::vector<T>& getData() { return _data; }
std::vector<T> const& getData() const { return _data; }
protected:
std::vector<T> _data;
};
现在你可以做
std::vector<std::unique_ptr<Column>> vec;
存储(拥有)指向
Column
实例的指针。
关于c++ - 如何创建派生对象的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62308247/