Si consideri il seguente codice:C++ Lambda: metodo statico di accesso in lambda induce in errore 'questo non è stato catturato per questa funzione lambda'
//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);
}
voglio chiamare una funzione che non posso modificare (vedi some_library_method
sopra) che si aspetta un puntatore a funzione come argomento. La chiamata dovrebbe essere effettuata in un membro della classe foo()
. So che non posso accedere ai membri della classe, ma tutto quello che voglio fare è accedere alla classe Singleton in modo statico (recuperare l'istanza di singleton).
C'è un modo in cui la riforma espressione lambda per mostrare il compilatore di destinazione, g ++ v4.7.2, che lo fa davvero non bisogno di un riferimento a this
?
grande, grazie – muffel