簡體   English   中英

C++綁定非靜態成員函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM