Я использую интеллектуальные указатели двух классов
class Foo{
};
class Derived : public Foo{
};
typedef boost::shared_ptr<Foo> FooPtr;
typedef boost::shared_ptr<Derived> DerivedPtr;
И я сохраняю вектор своих объектов как
std::vector<DerivedPtr> myVec;
, который я хочу использовать в методе, запрашивающем вектор умных указателей базового класса.
Method( std::vector<FooPtr> input ){
... }
Использование вектора напрямую, дает ошибку при компиляции.
cannot convert argument 1 from 'std::vector<DerivedPtr,std::allocator<_Ty>>' to 'std::vector<FooPtr, std::allocator<_Ty>>'
Таким образом, мое текущее решение - сначала «свернуть» мой вектор в новый вектор указателей базового класса, прежде чем передать его:
std::vector<FooPtr> downCastVec;
for ( auto & iter : myVec )
downCastVec.push_back( iter );
Method( downCastVec );
Это работает, но мой актуальный вопрос:
Есть ли лучший / более элегантный способ решения этой проблемы?