2012-11-28 36 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

相关问题