我有一个函数,它接受一个指向 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 是 shared_ptr 而不是 Jet*.
在 .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);
我不明白这里有什么问题...