【发布时间】:2012-11-27 01:46:05
【问题描述】:
我有一个函数,它接受一个指向 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);
我不明白这里有什么问题......
【问题讨论】:
-
我认为更新应该去一个不同的问题,因为它是一个编译问题,如果你没有忘记在 cpp 中#include 标题,你的代码是正确的。我建议您使用 IDE,这是最简单的,但我现在正在研究它,如何正确编译和链接它。
-
嗨,埃莱利亚斯!我刚刚找到了您的编译问题的答案:我的答案有点不准确,抱歉,我已经更正了。关键是您需要将显式模板实例化放入实现文件中,而不是头文件中。
标签: c++ boost shared-ptr