【问题标题】:C++ template-class Objects in vector向量中的 C++ 模板类对象
【发布时间】:2023-03-06 08:13:01
【问题描述】:

我尝试实现一个通用的 Tableview 以供控制台使用。

所以我试着让一切都通用

  • 模板类“Cell”,保存来自一个特定 Cell 的数据
  • 模板类“Column”,在其类型的向量中保存多个“单元格”(一列一类型)

现在,我尝试将所有不同类型的 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&lt;IColum *&gt; colums;

拜托,你能帮帮我吗?

【问题讨论】:

  • 有什么问题?更具体。
  • vector&lt;IColum *&gt; 有什么问题? Cellvector&lt;IColum* &gt; 有什么关系?还是您的整个设计遇到了障碍?
  • vector&lt;IColum *&gt; 没有问题,主要问题是:我无法创建特定的列,例如:IColum * colum1 = new Colum&lt;string&gt;();vector&lt;ISpalte*&gt; columns;columns.push_back(colum1);
  • “我不能”和“它不起作用”不够具体。您必须提供错误消息。

标签: c++ templates pointers vector interface


【解决方案1】:

所以。我找到了解决方案。

主要问题是,接口包含特定方法 virtual void setData(vector&lt;double*&gt; data)=0; virtual void setData(vector&lt;string*&gt; 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);

现在可以了。

感谢您的宝贵时间..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-26
    • 2013-04-19
    • 2016-09-26
    • 2020-05-22
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    相关资源
    最近更新 更多