Betrachten Sie den folgenden Code ein:C++ Lambda: Zugang statische Methode in Lambda führt ‚dies wurde nicht erfasst für diese Lambda-Funktion‘ auf Fehler
//this is what I want to call; I cannot modify its signature
void some_library_method(void(*fp)(void));
class Singleton{
public:
static Singleton *instance();
void foo();
void bar();
private:
Singleton();
};
void Singleton::foo(){
//this leads to an error ('this' was not captured for this lambda function)
void(*func_pointer)(void) = []{
Singleton::instance()->bar();
};
some_library_method(func_pointer);
}
Ich möchte ich eine Funktion aufrufen, kann nicht geändert werden (some_library_method
siehe oben) erwartet einen Funktionszeiger als Argument. Der Anruf sollte in einem Klassenmitglied foo()
erfolgen. Ich weiß, dass ich dort nicht auf Klassenmitglieder zugreifen kann, aber ich möchte nur auf die Klasse Singleton auf statische Weise zugreifen (die Singleton-Instanz abrufen).
Gibt es eine Möglichkeit Reform der Lambda-Ausdruck, der das Ziel Compiler zu zeigen, g ++ v4.7.2, dass es wirklich tut nicht zu this
eine Referenz benötigen?
groß verwenden können, danke – muffel