我有一个指向对象的 Boost 共享指针的 std::vector,并且希望获得一个共享指针的向量,该向量指向被转换为更具体类型的相同对象:
//using boost::shared_ptr, std::vector;
vector<shared_ptr<A> > originalVec;
vector<shared_ptr<B> > targetVec( originalVec.size() ); // B extends A
对于单个元素shared_ptr<A> elem
,可以使用 进行转换boost::static_pointer_cast<B>(elem)
,其语法在下面复制(来自Boost shared_ptr doc):
template<class T, class U>
shared_ptr<T> static_pointer_cast(shared_ptr<U> const & r); // never throws
我不知道如何使用它std::transform
。小米尝试包括:
//using boost::bind, boost::static_pointer_cast
transform( originalVec.begin(), originalVec.end(), targetVec.begin(), bind( static_pointer_cast<B>, _1) )
transform( originalVec.begin(), originalVec.end(), targetVec.begin(), bind( static_pointer_cast<B,A>, _1) )
在这两种情况下都获得"no matching function for call to bind(<unresolved overloaded function type>, boost::arg<1>& )"
有任何想法吗?
编辑: 问题可能与歧义有关,因为为侵入式指针类定义了类似的函数模板,语法:
template<class T, class U>
intrusive_ptr<T> static_pointer_cast(intrusive_ptr<U> const & r); // never throws
在这种情况下,问题是如何指定第一个参数的类型,以便编译器知道选择哪种方法。