亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過需要自由函數的成員函數?

如何通過需要自由函數的成員函數?

C++
千巷貓影 2019-08-12 10:02:37
如何通過需要自由函數的成員函數?問題如下:考慮這段代碼:#include <iostream>class aClass{public:     void aTest(int a, int b)     {         printf("%d + %d = %d", a, b, a + b);     }};void function1(void (*function)(int, int)){     function(1, 1);}void test(int a,int b){     printf("%d - %d = %d", a , b , a - b);}int main (int argc, const char* argv[]){     aClass a();     function1(&test);     function1(&aClass::aTest); // <-- How should I point to a's aClass::test function?     return 0;}我如何使用a's aClass::test作為參數function1?我堅持這樣做。我想訪問該班級的成員。
查看完整描述

3 回答

?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

但您也可以在不將class實例作為function1C ++ 11中的顯式參數傳遞的情況下執行此操作:

#include <functional>using namespace std::placeholders;void function1(std::function<void(int, int)> fun){
    fun(1, 1);}int main (int argc, const char * argv[]){
   ...

   aClass a;
   auto fp = std::bind(&aClass::test, a, _1, _2);
   function1(fp);

   return 0;}


查看完整回答
反對 回復 2019-08-12
?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

指向成員函數的指針與指向函數的指針不同。為了通過指針使用成員函數,您需要一個指向它的指針(顯然)和一個要應用它的對象。所以適當的版本function1將是

void function1(void (aClass::*function)(int, int), aClass& a) {
    (a.*function)(1, 1);}

并稱之為:

aClass a; // note: no parentheses; with parentheses it's a function declarationfunction1(&aClass::test, a);


查看完整回答
反對 回復 2019-08-12
  • 3 回答
  • 0 關注
  • 512 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號