2012-11-28 66 views
0

如何通過將對象和成員的函數傳遞給C++中的另一個函數來執行成員的函數。我明白我的問題的答案在那裏;但是,我不知道這是什麼。到目前爲止,我創建了2個文件,exeFunc.h和exeFunc.cpp。他們的代碼包括:如何通過將對象和成員函數傳遞給C++中的另一個函數來調用類?

exeFunc.h

/* 
File: exeFunc.h 

Header file for exeFunc Library. 
*/ 

#ifndef EXEFUNC_H 
#define EXEFUNC_H 

#include "mbed.h" 
#include "msExtensions.h" 
#include "cfExtensions.h" 

#include <map> 

class exeFunc 
{ 

public: 
    exeFunc(msExtensions &msExt, cfExtensions &cfExt); 

private: 

    void _splitFuncFromCmd(); 
    void _attachCallback(); 

    msExtensions &_msExt; 
    cfExtensions &_cfExt; 

    //FunctionPointer _p; 
}; 

#endif 

exeFunc.cpp

/* 
File: exeFunc.cpp 

Execute functions in other Sensor libraries/classes 

Constructor 
*/ 

#include "mbed.h" 
#include "ConfigFile.h" 
#include "msExtensions.h" 
#include "cfExtensions.h" 
#include "exeFunc.h" 

#include <map> 
#include <string> 

using namespace std; 

exeFunc::exeFunc(msExtensions &msExt, cfExtensions &cfExt) : _msExt(msExt), _cfExt(cfExt) 
{ 
    //_cfExt.checkConfigForFirstStart(); 
    //_p.attach(&_cfExt, &cfExtensions::checkConfigForFirstStart); 

    //_p.call(); 

} 

void exeFunc::_splitFuncFromCmd() 
{ 

} 

void exeFunc::_attachCallback() 
{ 

} 
+2

這是你在找什麼:http://stackoverflow.com/questions/130322/how-do-you-pass-a-member-function-pointer – jogojapan

+0

你想傳遞對象,還是函數指針指向成員函數? – SingerOfTheFall

+0

@SingerOfTheFall到目前爲止,我已經通過引用傳遞了所有對象,但是我從來沒有創建過指向成員函數的函數指針。基本上我試圖通過傳遞對象和成員函數來殺死兩隻鳥,所以我可以以一般方式執行該函數。 – dottedquad

回答

2

我寫了一個完整的例子,可以幫助

class MyClass 
{ 
public: 
    MyClass(int b) 
     :_b(b) 
    { 
    } 

    int Foo(int a) 
    { 
     return a * _b; 
    } 
    int _b; 
}; 

typedef int (MyClass::*MFP)(int); 

int get_result(MyClass* obj, MFP mfp) 
{ 
    int r = (obj->*mfp)(5); // 30 
    return r; 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    MFP mfp = &MyClass::Foo; 

    MyClass m(6); 
    get_result(&m, mfp); 


    return 0; 
} 
+1

注意此行:int r =(obj - > * mfp)(5); // 30 – Healer

+0

我用迄今爲止編寫的代碼編輯了我的OP。 – dottedquad

+0

被引用的對象_cfExt和_msExt具有我希望根據請求執行的方法。 – dottedquad

1

您的另一功能。如果有一個獨立的函數調用它。
要誠實你的問題不是完全clear.However:

int F(int,int,int); 
int g(); 
//main scope 
F(g(),a,b) 
+0

我可以解釋我正在嘗試做什麼的最好方法是,通過傳遞對象和方法以通用方式執行該函數來創建一個基本的泛型函數指針。 – dottedquad

+1

你應該定義一個指向函數的指針。你什麼意思是動態的? – bahrami703i

+0

動態的我的意思是將指針傳遞給另一個函數來執行成員函數。 「動態」可能是錯誤的選擇。 – dottedquad

相關問題