引数として、Fooへのポインターのstlベクトルを受け取る関数があります。
ただし、同じクラスFooへの共有ポインターであるオブジェクトもあります。この他のオブジェクトにもフィードするこの関数を呼び出せるようにしたいと思います。関数をオーバーロードする必要がありますか?vector<shared_ptr<Foo>>
からへの動的キャストができないようですvector<Foo*>
。
Get()メソッドを使用してshared_ptrをポインターに変換できることは知っていますが、これはどうでしょうか。何か案は?
質問の更新:
以下に提案するソリューションを実装しましたが、テンプレート関数で可能なすべての型を宣言すると、次のようになります。
"'void my_func(std :: vector&、std :: vector&)[with Ptr_Jet1 = Jet *、Ptr_Jet2 = Jet *]'の明示的なインスタンス化ですが、定義はありません。"
他のすべての組み合わせについても同じです(たとえば、Ptr_Jet1はJet*ではなくshared_ptrです。
.cppファイルには、次のものがあります。
template<typename Ptr_Jet1, typename Ptr_Jet2>
void my_func(vector<Ptr_Jet1> vec1, vector<Ptr_Jet2> vec2){
//definition
}
.hファイルには、次のものがあります。
typedef boost::shared_ptr<Jet> ptr_jet;
template<typename Ptr_Jet1, typename Ptr_Jet2>
void my_func(vector<Ptr_Jet1> vec1, vector<Ptr_Jet2> vec2);
//
template void my_func(vector<Jet*> vec1, vector<Jet*> vec2);
template void my_func(vector<Jet*> vec1, vector<ptr_jet> vec2);
template void my_func(vector<ptr_jet> vec1, vector<Jet*> vec2);
template void my_func(vector<ptr_jet> vec1, vector<ptr_jet> vec2);
ここで何が悪いのかわかりません...