J'ai un conteneur de pointeurs que je veux parcourir, en appelant une fonction membre qui a un paramètre qui est une référence. Comment est-ce que je fais ceci avec STL?std :: for_each, fonction de membre appelant avec le paramètre de référence
Ma solution actuelle consiste à utiliser boost :: bind et boost :: ref pour le paramètre.
// Given:
// void Renderable::render(Graphics& g)
//
// There is a reference, g, in scope with the call to std::for_each
//
std::for_each(
sprites.begin(),
sprites.end(),
boost::bind(&Renderable::render, boost::ref(g), _1)
);
Une question connexe (dont je tirais ma solution actuelle de) est boost::bind with functions that have parameters that are references. Cela demande spécifiquement comment le faire avec boost. Je demande comment cela serait fait sans boost.
Modifier: Il existe un moyen de faire la même chose sans utiliser boost
. En utilisant std::bind
et les amis du même code peut être écrit et compilé dans un compilateur C++ 11 compatible comme ceci:
std::for_each(
sprites.begin(),
sprites.end(),
std::bind(&Renderable::render, std::placeholders::_1, std::ref(g))
);
boost :: bind (et Renderable :: render, _1, boost :: ref (g)) devrait probablement être boost :: bind (& Renderable :: render, boost :: ref (g), _1) – Carl
@carleeto Bon capture. Corrigé après 4 ans d'erreur! –