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

C++ template-class Objects in vector

本文关键字:对象 C++      更新时间:2023-10-16

我试图实现一个用于控制台使用的通用表视图。

所以我试着让所有东西都通用

  • 模板类"Cell",保存一个特定Cell的数据
  • 模板类"Column",在其类型的向量中包含多个"Cells"(一个Column一个Type)

现在,我尝试将所有不同类型的Column存储在一个向量中。这自然是行不通的。我的下一步是,我尝试构建一种抽象//接口类,它将是模板列的基类。

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;

求你了,你能帮我吗?

所以。我找到了解决办法。

主要问题是,接口包含特定的方法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);

现在它起作用了。

谢谢你抽出时间。。