2013-04-01 10 views
5

Poiché std::function può contenere funzioni membro, quindi deve memorizzare un puntatore all'istanza dell'oggetto da qualche parte.Come ottenere questo puntatore da std :: function?

Come posso recuperare il puntatore this da un std::function che contiene una funzione membro?

+0

Hai dato un'occhiata ad es. http://en.cppreference.com/w/cpp/utility/functional/function? –

+0

@OliCharlesworth. Certo che l'ho fatto. Dimmi se ero cieco alla risposta. – danijar

+1

Sono abbastanza sicuro che questo tipo di informazioni non sia deliberatamente esposto nella libreria e quindi inaccessibile in modo portatile. –

risposta

8

Un oggetto di tipo std::function contiene un oggetto richiamabile . Un puntatore alla funzione membro è un tipo di oggetto callable; può essere chiamato con un argomento del tipo di classe appropriato, più eventuali argomenti aggiuntivi di cui ha bisogno. Ad esempio:

struct S { 
    void f(int); 
}; 
std::function<void(S, int)> g(&S::f); 

chiamare, passare un oggetto di tipo S:

S s; 
g(s, 3); 

noti che l'oggetto non std::functionnon tenere un oggetto S; è solo quando lo chiami che il puntatore della funzione viene associato a un oggetto.

+1

Il mio obiettivo è scartare lambda che ho passato come 'std :: function' a un'altra funzione. Come posso farlo allora? Con lo unwrapping intendo dividerlo in un puntatore this e un puntatore a una funzione statica usando 'std :: function :: target' per ulteriori elaborazioni. – danijar

+3

@danijar: Perché non metti il ​​tuo obiettivo nella tua domanda? La tua domanda ha poco senso. – GManNickG

+0

@danijar è possibile creare il proprio oggetto funzione che associa un puntatore 'this' e consente il recupero. – Pubby

Problemi correlati