c++ - 如何创建派生对象的 vector ?

标签 c++ c++11 templates inheritance stl

我已经在该网站上阅读了几篇文章,但是我仍然不知道从不同的派生类创建对象的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 ,它可以是IntColumnFloatColumn等等。
(在我的脑海中,它就像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/

相关文章:

c++ - 使用模板将std::shared_ptr <Derived>上载到std::shared_ptr <Base>

c++ - 类定义中的模板特化

c++ - 您如何计算指数移动平均线的 X° 步长?

c++ - 避免在类头文件中声明私有(private)函数 (C++)

c++ - 如何修复 xychart.cpp 中的 "index < m_series->count()"错误?

c++ - 任何人都可以解释 boost::thread 的这个意外结果吗?

c++ - C++11 段错误中基于范围的 for 循环,但不是常规 for 循环

c++ - 创建仿函数时友元函数的可见性

c++ - 使用某些系数将图像转换为灰度的最快方法

C++ 类在不知道类型的情况下从模板类继承?