std :: for_each, ruft Memberfunktion mit Referenzparameter
-
10-07-2019 - |
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))
);
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.