[英]C++ Binding non-static member function
我正在嘗試將成員函數傳遞給嵌套類中的另一個函數。
傳遞非成員函數效果很好,但傳遞成員不會編譯:
class A { class B { B(); ~B(); doSomething(); }; class C { C(); ~C(); execute(function<void(void)> func); }; C *myC; map<int, B> myMap; }
void A::member(int param) { A::myMap[param].doSomething(); } void nonA_func(int param) { ... } void A::caller() { myC->execute(bind(nonA_func, 42)); // OK myC->execute(bind(A::member, 42)); // COMPILER ERROR 1 myC->execute(A::myMap[42].doSomething()); // COMPILER ERROR 2 } A::main() { myC = new A::C(); // filling myMap caller(); myMap.clear(); delete C; }
編譯時出現以下COMPILER ERROR 1
:
error: invalid use of non-static member function myC->execute(bind(A::member, 42)); ^
實際上將A::member
定義為static
解決了這個問題,但是我不能再訪問myMap
了。 如何綁定非靜態成員函數?
我也試圖直接傳遞被調用的函數,導致COMPILER ERROR 2
:
invalid use of void expression myC->execute(A::myMap[42].doSomething()); ^
您需要將this
指針傳遞給bind
(或 lambda)。 您不能在沒有實例的情況下使用實例變量/函數。
myC->execute(bind(&A::member, this, 42));
myC->execute([this]{ member(42); });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.