kullanarak üye işlevine işaretçiler Bunun zaten tartışılan uzun bir konu olduğunu biliyorum, ancak henüz tatmin edici bir yanıt bulamadım.C++ 11: std :: function :: target()
kısacası Soru: Hatta() yetenekleri, c tarzı yöntemlerine üye işlev işaretçileri geçmek değil mümkündür C++ 11 fonksiyonu :: hedefini kullanarak? 0 döndürür) (mbf.target için çağırma ve böylece segfault üretilir:
Aşağıdaki kod çalışmaz. Ve neden anlamıyorum, çünkü üye işlevini genel bir işlev nesnesine bağlarım, dolayısıyla türün iyi olması gerekir. Ben yanlış yapıyorum yoksa imkansız bir şey yapmak çalışıyorum ne
?
#include <functional>
using namespace std;
typedef void (*CBType)(int, int);
CBType myCB = 0;
void regCallback(CBType cb)
{
myCB = cb;
}
class A
{
public:
void memberCB(int a, int b) {}
void registerCallback()
{
auto mbMem = mem_fn(&A::memberCB);
function<void(int,int)> mbf =
bind(mbMem, *this, placeholders::_1, placeholders::_2);
regCallback(*mbf.target<void(*)(int,int)>());
}
};
int main()
{
A inst;
inst.registerCallback();
}
. Bence orada berbatsın. '& A :: memberCB' türünün geçersiz olduğunu (A :: *) (int, int) ve boş değil (*) (int, int) 'olduğunu unutmayın. Kodunuz derlenmiyor, derleme kodu verebilir misiniz? – iammilind
Doğru, başlık dosyasını ve ad alanını ekledim. Sonra g ++ ve derleyici bayrağı "-std = C++ 0x" – bobbel
Impossible kullanarak derler. 'target', daha önce orada sakladığınız bir işlev işaretçisini almak içindir. Hiçbir büyü yapmaz ve altın üretemez. Burada 'hedef' hakkında unutabilirsiniz; tamamen farklı (ve oldukça nadir) kullanım durumları vardır. –