samedi 23 juillet 2011

Trop de choix


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: