トピックが示唆するように、私は任意のデータ型を保持できるベクトルを作成しようとしています。私は、コードを将来的にはより保守しやすいようにテンプレートを使用しようとしています。任意のデータ型を保持できるテンプレート化されたジェネリックベクターを作成するのが難しい
#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
は、私が手で保持する必要があるすべてのタイプを与えなければならないので、どちらも役に立ちません。私はその制限を望んでいません。誰でも可能かどうか私に示唆することができますか、私は不可能を達成しようとしていますか? 私は、文字列をすべてキャストして保存するような、別のアルゴリズムを私の心に持っています。しかし、そのアプローチは適切に見えません。
ありがとうございました:)
だから、なぜあなたは車輪の再発明していますか? 'std :: vector'を参照してください。すでにテンプレート化され、テスト済みです。 –
@ThomasMatthewsこれは私が一見したところで考えたことですが、私はOPの問題が1つの 'std :: vector'に異なる型を得ていると思います。 – user4581301
@ThomasMatthews OPはすでに 'std :: vector'を使用しています。OPは異なるデータ型を保持したいだけです。 – Barry