Frage

Ich habe einen Container von Zeigern, die ich will überlaufen, eine Member-Funktion aufrufen, die einen Parameter hat, die eine Referenz. Wie mache ich das mit STL?

Meine aktuelle Lösung ist boost verwenden :: bind und boost :: ref für den Parameter.

// 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)
);

Eine weitere Frage (von dem ich aus meiner aktuellen Lösung abgeleitet) ist boost :: bind mit Funktionen, die Parameter, die Referenzen sind . Dies fragt insbesondere, wie dies mit Auftrieb zu tun. Ich frage, wie es getan werden würde ohne Schub.

Bearbeiten : Es gibt einen Weg, um diese gleiche Sache zu tun, um jede boost ohne Verwendung. Durch die Verwendung von std::bind und Freunden kann der gleiche Code geschrieben und in einem C ++ 11-kompatible Compiler wie folgt zusammengestellt werden:

std::for_each(
  sprites.begin(),
  sprites.end(),
  std::bind(&Renderable::render, std::placeholders::_1, std::ref(g))
);
War es hilfreich?

Lösung

Dies ist ein Problem mit dem Design von <functional>. Sie haben entweder boost :: bind oder tr1 :: bind verwenden.

Andere Tipps

Schauen Sie sich Wie std :: foreach mit Parametern / Änderung verwenden, . Die Frage zeigt, wie es geht eine Verwendung für Schleife. Die akzeptierte Antwort gibt ein Beispiel dafür, wie dies mit dem for_each Algorithmus zu erreichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top