std :: for_each, fonction membre appelante avec paramètre de référence
-
10-07-2019 - |
Question
J'ai un conteneur de pointeurs que je souhaite parcourir, en appelant une fonction membre qui a un paramètre qui est une référence. Comment puis-je faire cela avec STL?
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 (à partir de laquelle ma solution actuelle est issue) est boost :: bind avec des fonctions dont les paramètres sont des références . Cela demande spécifiquement comment faire cela avec boost. Je demande comment cela se ferait sans boost.
Modifier : il existe un moyen de faire la même chose sans utiliser aucun boost
. En utilisant std::bind
et ses amis, le même code peut être écrit et compilé dans un compilateur compatible C ++ 11 comme ceci:
std::for_each(
sprites.begin(),
sprites.end(),
std::bind(&Renderable::render, std::placeholders::_1, std::ref(g))
);
La solution
Ceci est un problème de conception de <functional>
. Vous devez soit utiliser boost :: bind ou tr1 :: bind.
Autres conseils
Découvrez Comment utiliser std :: foreach avec des paramètres / modifications . La question montre comment faire en utilisant une boucle for. La réponse acceptée donne un exemple de la façon de réaliser cela avec l’algorithme for_each.