2013-04-01 23 views
5

Od std::function może przechowywać funkcje składowe, więc musi gdzieś przechowywać wskaźnik do instancji obiektu.Jak uzyskać ten wskaźnik ze std :: function?

Jak mogę pobrać wskaźnik this od std::function, który zawiera funkcję składową?

+0

Czy obejrzałeś np. http://en.cppreference.com/w/cpp/utility/functional/function? –

+0

@OliCharlesworth. Oczywiście, zrobiłem. Powiedz mi, czy byłem ślepy na odpowiedź. – danijar

+1

Jestem prawie pewny, że tego rodzaju informacje są celowo niewidoczne w bibliotece, a przez to niedostępne w przenośny sposób. –

Odpowiedz

8

Obiekt typu std::function posiada obiekt wywoływalny do wywoływania. Wskaźnik do funkcji członka jest rodzajem obiektu wywoływalnego; można go wywołać za pomocą argumentu odpowiedniego typu klasy oraz dodatkowych argumentów, których potrzebuje. Na przykład:

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

to nazwać, przekazać obiekt typu S:

S s; 
g(s, 3); 

nocie, że obiekt std::function dokłada nie trzymanie przedmiotu S; to tylko wtedy, gdy go nazwiesz, wskaźnik funkcji zostaje powiązany z obiektem.

+1

Moim celem jest rozwinięcie lambd, które przekazałem jako 'std :: function' do innej funkcji. Jak mogę to zrobić? Przez rozpakowanie mam na myśli podzielić go na "ten" wskaźnik i statyczny wskaźnik funkcji używający 'std :: function :: target' do dalszego przetwarzania. – danijar

+3

@danijar: Dlaczego zamiast tego zamieścisz swój cel w swoim pytaniu? Twoje pytanie ma niewielki sens. – GManNickG

+0

@danijar można utworzyć własny obiekt funkcji, który wiąże wskaźnik "this" i umożliwia pobieranie. – Pubby

Powiązane problemy