std::bind() mit nicht-statischen Member-Methoden [Erledigt]
-
Hallo,
wenn man die std::bind Doku durchliest, mag man meinen, dass das nur mit statischen Methoden oder globalen Funktionen funktioniert. Recherchiert man allerdings weiter, findet man auf Stackoverflow Lösungen, womit man auch nicht-statische Methoden binden kann:auto blub = std::bind(&MyClass::nonStaticFoo, this);
Das funktioniert gut, wenn ich alle Parameter sofort binde, aber wenn ein Parameter erst beim Aufruf übergeben werden soll, funktioniert das nicht mehr.:
#include <functional> class MyClass { public: void foo(int a) {} }; int main() { MyClass classInstance; // Funktioniert std::function<void(int)> function = std::bind(&MyClass::foo, &classInstance, 3); // Funktioniert nicht! //std::function<void(int)> function = std::bind(&MyClass::foo, &classInstance); // Funktioniert! std::function<void(int)> function2 = [&](int a) { classInstance.foo(a); }; return 0; }
Irgendwie suboptimal. Wie löst man diese Problematik am besten außer durch ein Closure?
Danke im Voraus!
-
Welche Doku meinst du denn? Kennst du https://en.cppreference.com/w/cpp/utility/functional/bind ?
So geht es:
std::function<void(int)> function1 = std::bind(&MyClass::foo, &classInstance, std::placeholders::_1);
-
@Steffo sagte in std::bind() mit nicht-statischen Member-Methoden:
Irgendwie suboptimal. Wie löst man diese Problematik am besten außer durch ein Closure?
Warum sollte man es anders lösen? std::bind ist völlig überflüssig.
Mit CLI/.NET hat deine Frage nichts zu tun.
-
@Bashar Oha, danke! Das hatte ich vollkommen übersehen!
@manni66 Naja, das geht Richtung double dispatch und das ist einfach unnötig.
Ja, ich habe die Frage leider in der falschen Kategorie gestellt. Kann verschoben werden.
-
-
@manni66 sagte in std::bind() mit nicht-statischen Member-Methoden:
das geht Richtung double dispatch
Was glaubst du macht bind? Magie?
Ist das auch ein Double Dispatch? Ist das wirklich gleich effizient?
-