void cb::EntityManager::processEvents()
{
std::deque<std::shared_ptr<EntityEvent> > events;
m_eventQueue->popAll(events);
// version 1
std::for_each(events.begin(),
events.end(),
std::bind(&EntityEvent::accept, std::placeholders::_1, this));
// version 2
for(const std::shared_ptr<EntityEvent> & event : events)
{
event->accept(this);
}
// version 3
std::for_each(events.begin(),
events.end(),
[this](const std::shared_ptr<EntityEvent> & event){event->accept(this);});
}
Et je fais comment, moi, maintenant?
Autant j'adore les lambdas, autant c'est ici la solution la moins préférable: l'on a la déclaration explicite du contenu, contrairement à la solution basée sur std::bind, et l'on a l'overhead du la création de l'objet lambda, contrairement au range-based for.
Au final, je crois que je la solution du range-based for me plaît plus, car elle me semble vaguement plus efficace. Il faudra que je benchmarke un peu tout ça.
Aucun commentaire:
Enregistrer un commentaire