正如主题所示,我正在尝试创建一个可以包含任何数据类型的向量。我正在尝试使用模板,以便将来可以更加维护代码。
#include<iostream>
#include<memory>
#include<vector>
struct prime{
public:
template<typename T>
T get();
};
template<typename T>
struct foo: prime{
public:
T i;
foo(T k):i(k){
}
template<typename T1>
T1 get(){
return i;
}
};
/*
struct fooString :prime{
public:
std::string i;
fooString(std::string k):i(k){
}
};
*/
int main(){
std::vector<std::shared_ptr<prime>> v;
std::shared_ptr<foo<int>> p1 = std::make_shared<foo<int>>(0);
std::shared_ptr<foo<char>> p3 = std::make_shared<foo<char>>('H');
//std::shared_ptr<fooString> p2 = std::make_shared<fooString>("HK");
v.push_back(p1);
v.push_back(p3);
//v.push_back(p2);
//std::cout<<v[0]->i<<" "<<v[1]->i<<std::endl;
//std::cout<<static_cast<foo<int>>(*v[0]).get();
std::cout<<v[0]->get<int>();
}
评论代码是我尝试解决此问题的不同方法。但我无法解决这个问题。任何建议都会对我有所帮助。我尝试了this SO,但正如我所说,创建不同数据类型的联合很难维护。并且boost::variant
也没有帮助,因为我必须提供它需要预先掌握的所有类型。我不想要那个限制。任何人都可以建议我是否有可能或者我只是想要实现不可能的事情?
我脑子里还有另一种算法,就像把所有东西都串起来存放一样。但这种方法看起来并不恰当。
谢谢:)