Je suis en train de développer un programme dans lequel je me retrouve souvent à faire ce genre de choses :
void Model::SetCollideMode( const std::string &m )
{
Body *body;
std::map<std::string, Body* >::iterator iter;
for (iter=this->bodies.begin(); iter!=this->bodies.end(); iter++)
{
body = iter->second;
body->SetCollideMode( m );
}
}
J'ai plusieurs méthodes de ce type dans plusieurs objets qui appliquent essentiellement une propriété à tous ses enfants. Venant du monde Ruby, je meurs d'envie de faire quelque chose comme ça :
for_all_bodies{ body->SetCollideMode(m) }
Est-il possible de rendre ce code plus proche des fermetures ou de l'améliorer d'une autre manière ?
Je suis conscient de la façon dont le C++ fonctionne, qu'il est basé sur la pile et qu'il n'y a pas d'informations contextuelles pour créer une fonctionnalité de fermeture parfaite (cela nécessite une VM ?) mais au moins améliorer le type de programmation actuel qui consiste à répéter ce code 100 fois.