我正在使用两个类的 boost 智能指针
class Foo{
};
class Derived : public Foo{
};
typedef boost::shared_ptr<Foo> FooPtr;
typedef boost::shared_ptr<Derived> DerivedPtr;
我将对象的 vector 保存为
std::vector<DerivedPtr> myVec;
我想在请求基类智能指针 vector 的方法中使用它。
Method( std::vector<FooPtr> input ){
... }
直接使用vector,编译会报错。
cannot convert argument 1 from 'std::vector<DerivedPtr,std::allocator<_Ty>>' to 'std::vector<FooPtr, std::allocator<_Ty>>'
所以我当前的解决方案是先将我的 vector “向下转换”为基类指针的新 vector ,然后再传递它:
std::vector<FooPtr> downCastVec;
for ( auto & iter : myVec )
downCastVec.push_back( iter );
Method( downCastVec );
这行得通,但我的实际问题是:
有没有更好/更优雅的方法来处理这个问题?
最佳答案
只需使用带有两个迭代器的std::vector
构造函数重载来构造一个临时的:
Method( {myVec.begin(), myVec.end()} )
为了方便起见,您还可以声明一个采用派生指针 vector 的 Method()
重载,并且只执行此操作。当经常这样做时,这将防止一些代码膨胀。
关于c++ - 传递派生对象的智能指针 vector - 什么是最佳解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54216877/