2013-04-01 16 views
5

std::function, üye işlevlerini tutabildiğinden, nesne örneğine bir işaretçiyi bir yerlerde depolamalıdır.Bu işaretçi std :: function'dan nasıl alabilirim?

Bir üye işlevini tutan std::functionthis işaretçisini nasıl getirebilirim?

+0

Örneğinize bir göz attınız mı? http://en.cppreference.com/w/cpp/utility/functional/function? –

+0

@OliCharlesworth. Tabi ki yaptım. Cevaba körü olup olmadığımı söyle. – danijar

+1

Bu tür bilgilerin kütüphanede kasıtlı olarak ortaya çıkmadığından ve dolayısıyla taşınabilir bir şekilde erişilemediğinden eminim. –

cevap

8

std::function türünde bir nesne callable nesnesini tutar. Üye işlevine bir işaretçi, bir tür değiştirilebilir nesne; Uygun sınıf türünün bir argümanı ve ihtiyaç duyduğu ek argümanlar ile çağrılabilir. Örneğin:

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

aramak için, tip S bir nesne pass: std::function nesne bir S nesne sahibi olmadıklarını

S s; 
g(s, 3); 

Not; Sadece işlev işaretçisinin bir nesneye bağlı olduğunu söylediğinizde.

+1

Amacım, std :: function işlevi olarak başka bir işleve geçemediğim lambdaları açmaktır. Öyleyse nasıl yapabilirim? Unwrapping tarafından daha fazla işlemek için 'std :: function :: target' kullanarak bir' '' '' pointer'' ve bir statik fonksiyon göstericisine ayırmak istiyorum. – danijar

+3

@danijar: Hedefinizi neden kendi isteğinize dahil etmiyorsunuz? Senin sorunun çok mantıklı değil. – GManNickG

+0

@danijar '' bu' işaretçisini bağlayan ve geri almayı sağlayan kendi işlev nesnesini oluşturabilirsiniz. – Pubby

İlgili konular