7

std::vector 複数の shared_ptr それぞれに異なる型へのポインターを格納するにはどうすればよいですか?

std::vector < ? > vec;
vec.push_back( make_shared<int>(3));
vec.push_back( make_shared<float>(3.14f));

コンパイラ固有のものを使用せずにそのタスクに使用できる基本ポリモーフィック クラスはありますか?

4

6 に答える 6

7

これを行うにはいくつかの方法があります。int と float を使用しているため、さまざまなネイティブ型を格納したいと思います。

  1. タイプのリストが限られている場合は、boost::variantを使用してください。例えば

    std::vector<std::shared_ptr<boost::variant<int, float>>>;
    
  2. 何かを保存したい場合は、boost::anyを使用してください。例えば

    std::vector<std::shared_ptr<boost::any>>;
    
于 2013-06-24T15:22:38.757 に答える
0

これを正確に行う必要がある場合は、boost::anyを使用してください。

そして使うstd::vector <std::shared_ptr<boost::any> > vec;

于 2013-06-24T15:22:54.457 に答える
0

そのようなタイプを混在させることはできません。boost::anyを見たいと思うかもしれません

于 2013-06-24T15:22:56.990 に答える
0

いいえ、C++ には、他の多くの言語のようにすべてが派生する単一の型はありません。 intfloatネイティブ型です。つまり、これらは言語の基本であり、他のものから派生したものではありません。

ブーストの利点がある場合は、代わりに保存anyまたは入力できvariantますvector

于 2013-06-24T15:23:38.230 に答える