簡體   English   中英

c++ 使用指向 class 模板的指針初始化向量

[英]c++ initialize vector with pointers to class template

我嘗試使用指向模板 class 的指針來初始化 std 向量
使用 c++11 和 g++
像這樣,它失敗了:

template <typename T>
struct Column  
{
    Column( T data)
    {             
        this->data = data;
    }

    T data;
    
}; 

int main(int argv,char** argc)
{
  std::vector<std::vector<Column*>> csv;
  
}

我需要這樣才能初始化具有不同類型的列:

 Column<std::string>* tmpString = new Column<std::string>(each);
 csv[0].push_back(tmpString);    

or 

 Column<int>* tmpInt = new Column<int>(each);
 csv[0].push_back(tmpString); 

有什么辦法嗎? 或者更好的方法?

不可能直接這樣做,你需要一個抽象基類/接口來做類似的事情。

也不要使用 naked new/delete 而更喜歡 std::unique_ptr 這樣當 vector 超出 scope 時你的實例就會被清理掉。

演示: https://onlinegdb.com/lIhmM_RC3z

例子:

#include <iostream>
#include <string>
#include <vector>
#include <memory>

struct ColumnItf
{
    virtual void visit() const = 0;
};

template<typename type_t>
class Column :
    public ColumnItf
{
public:

    explicit Column(const type_t& data) :
        m_data{ data }
    {
    }

    void visit() const override
    {
        std::cout << m_data << "\n";
    }

private:
    type_t m_data;
};

int main()
{
    std::vector<std::unique_ptr<ColumnItf>> columns;
    
    columns.emplace_back(std::make_unique<Column<int>>(1));
    columns.emplace_back(std::make_unique<Column<std::string>>("Hello"));
    
    for (const auto& itf : columns)
    {
        itf->visit();
    }

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM