方法があります
void foo(list<shared_ptr<Base>>& myList);
これは、DerivedClass1とDerivedClass2の2種類のリストで呼び出そうとしています。
list<shared_ptr<DerivedClass1>> myList1;
foo(myList1);
list<shared_ptr<DerivedClass2>> myList2;
foo(myList2);
ただし、これは明らかにコンパイラエラーを生成します
error: a reference of type "std::list<boost::shared_ptr<Base>, std::allocator<boost::shared_ptr<Base>>> &" (not const-qualified) cannot be initialized with a value of type "std::list<boost::shared_ptr<DerivedClass1>, std::allocator<boost::shared_ptr<DerivedClass1>>>"
shared_ptrのコンテナをキャストする簡単な方法はありますか?これを達成できる代替コンテナの?
更新:回答してくれたすべての人に感謝します。言語の範囲内で作業する場合、メソッドを「現状のまま」維持しながら、shared_ptrのコンテナーを使用し、それを正確に渡す(呼び出しサイトで新しいリストを作成する)のが最善の方法のようです。
私はすでにこれを知っていると思いますが、shared_ptrのコンテナーを処理するBoostライブラリの他の部分について読んだことを思い出し、おそらく他の誰かによってもっとエレガントに解決されたのではないかと思いました。しかし、私自身のさらなる調査から、これらは、多数のポインターが排他的に所有されている場合のshared_ptrのオーバーヘッドの削減に向けられているようです(したがって、コンテナー内のオブジェクトごとに1つではなく、コンテナーごとに1つのロックが必要です)。
もう一度ありがとう、皆さんはすべて素晴らしいです!