Tengo este bucle for:convertir un bucle para un std :: for_each
std::vector<itemPtr>::iterator it;
for(it=items.begin(); it!=items.end(); ++it)
{
investigators.addToLeaderInventory(*it);
}
me gustaría convertirlo en algo como esto:
std::for_each(items.begin(), items.end(), investigators.addToLeaderInventory);
Sin embargo, ese la línea no compila. g ++ me muestra esto:
error: no matching function for call to
‘for_each(__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<yarl::item::Item>*,
std::vector<std::tr1::shared_ptr<yarl::item::Item>,
std::allocator<std::tr1::shared_ptr<yarl::item::Item> > > >,
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<yarl::item::Item>*,
std::vector<std::tr1::shared_ptr<yarl::item::Item>,
std::allocator<std::tr1::shared_ptr<yarl::item::Item> > > >, <unresolved overloaded
function type>)’
/usr/include/c++/4.4/bits/stl_algo.h:4194: note: candidates are: _Funct
std::for_each(_IIter, _IIter, _Funct) [with _IIter =
__gnu_cxx::__normal_iterator<std::tr1::shared_ptr<yarl::item::Item>*,
std::vector<std::tr1::shared_ptr<yarl::item::Item>,
std::allocator<std::tr1::shared_ptr<yarl::item::Item> > > >, _Funct = void
(yarl::party::Party::*)(yarl::itemPtr)]
Difícil de leer, por decir lo menos. Me imagino que la solución es bastante simple, pero no puedo entender de qué se queja BG. La firma de investigators.addToLeaderInventory()
es la siguiente:
void ClassName::addToLeaderInventory(itemPtr item);
que debe funcionar con una for_each
, no? ¿Qué debería cambiar?
si usted está dispuesto a impulsar el uso, hay una excelente aplicación foreach, BOOST_FOREACH – Anycorn