向量中的C ++模板类对象

时间:2015-12-05 18:19:38

标签: c++ templates pointers vector interface

我尝试为控制台使用实现通用Tableview。

所以我试图让一切都变得通用

  • 模板类" Cell",它保存来自一个特定Cell的数据
  • 模板类"列",它包含几个" Cells"在他们的类型向量(一列一类)

现在,我尝试将所有不同类型的列存储在向量中。当然,这不会起作用。我的下一步是,我尝试构建一种抽象的//接口类,它将是模板化列的基类。

class IColum{
public:
    virtual ~IColum(){};

    virtual void setHeading(string head) =0;
    virtual void setData(vector<double*> data)=0;
    virtual void setData(vector<string *> data)=0;
    virtual void print(int n)=0;
    virtual vector<size_t> sort(bool mode) =0;
    virtual void reorder(vector<size_t> rf)=0;
};

template<typename T>
class Colum : public IColum{
public:
    Colum(){
        cout<<"TEST";
    };

    Colum(string n,vector<T*> data);
    Colum(string n,vector<T*> data, int f);

    void setHeading(string head);
    void setData(vector<T*> data);
    void print(int n);
    vector<size_t> sort(bool mode);
    void reorder(vector<size_t> rf);
    ~Colum(){};
private:
    string name;        
    vector<Cell<T>> rows; //templated cell-class
};

//Implementation of the functions

后来我想要这个:

IColum * colum1 = new Colum<string>();

vector<IColum*> colums;

colums.push_back(colum1);

vector<IColum *> colums;

拜托,请你能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

因此。我找到了解决方案。

主要问题是,界面包含特定方法 virtual void setData(vector<double*> data)=0; virtual void setData(vector<string*> data)=0;

事实上,这是通用的,这是反通用的...所以我删除了这个。

Colum<string> * colum1 = new Colum<string>();
Colum<double> * colum2 = new Colum<double>();

vector<IColum*> colums;

colums.push_back(colum1);
colums.push_back(colum2);

现在可行。

谢谢你的时间..