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))
);
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top