Вы не можете разыграть векторы. Тем не менее, вам действительно не нужно.
Если вы действительно хотите, вы можете использовать Boost Iterator ( документация )
static Derived* ToDerived(Base* b)
{
return dynamic_cast<Derived*>(b); // return null for incompatible subtypes
}
static void DoSomething(Derived* d)
{
if (!d)
return; // incompatible type or null entry
// do work
}
// somewhere:
{
std::vector<Base*> bases;
std::for_each(
boost::make_transform_iterator(bases.begin(), &ToDerived),
boost::make_transform_iterator(bases.end(), &ToDerived),
DoSomething);
}
Примечание : особенно удобный эффект использования dynamic_cast<Derived*>
заключается в том, что если тип времени выполнения объекта не может быть приведен к Derived*
(например, поскольку это на самом деле OtherDerived*
, он просто вернет указатель null
.