[英]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.