std::vector 複数の shared_ptr それぞれに異なる型へのポインターを格納するにはどうすればよいですか?
std::vector < ? > vec;
vec.push_back( make_shared<int>(3));
vec.push_back( make_shared<float>(3.14f));
コンパイラ固有のものを使用せずにそのタスクに使用できる基本ポリモーフィック クラスはありますか?
std::vector 複数の shared_ptr それぞれに異なる型へのポインターを格納するにはどうすればよいですか?
std::vector < ? > vec;
vec.push_back( make_shared<int>(3));
vec.push_back( make_shared<float>(3.14f));
コンパイラ固有のものを使用せずにそのタスクに使用できる基本ポリモーフィック クラスはありますか?
これを行うにはいくつかの方法があります。int と float を使用しているため、さまざまなネイティブ型を格納したいと思います。
タイプのリストが限られている場合は、boost::variantを使用してください。例えば
std::vector<std::shared_ptr<boost::variant<int, float>>>;
何かを保存したい場合は、boost::anyを使用してください。例えば
std::vector<std::shared_ptr<boost::any>>;
これを正確に行う必要がある場合は、boost::anyを使用してください。
そして使うstd::vector <std::shared_ptr<boost::any> > vec;
そのようなタイプを混在させることはできません。boost::anyを見たいと思うかもしれません
いいえ、C++ には、他の多くの言語のようにすべてが派生する単一の型はありません。 int
とfloat
はネイティブ型です。つまり、これらは言語の基本であり、他のものから派生したものではありません。
ブーストの利点がある場合は、代わりに保存any
または入力できvariant
ますvector
。