C ++将指向成员函数的指针作为参数传递

时间:2012-07-24 10:34:31

标签: c++

我需要将指向成员函数的指针作为参数传递给另一个类中的成员函数。我正在做的是下面的事情。 我想用void * ProcessHandler :: Task(void * a)作为第一个参数调用int Processor :: AddJob(void _pFunc)(void *),void * _pArg)方法。 我这样做了

TaskFunc pFunc1 = &ProcessHandler::Task;
p_Processor->AddJob(pFunc1,10);

但它给出了错误

  

错误:没有用于调用Processor :: AddJob的匹配函数(void *   (ProcessHandler :: &)(void ),int)'Processor.h:47:注意:候选人   是:int Processor :: AddJob(void *()(void ),void *)

有人可以帮我解决这个问题。我的实现如下。(不是确切的代码 - 它比这大得多)

class Processor 
{
public:
    Processor();
    virtual ~Processor();

    int AddJob(void *(*_pFunc)(void*), void* _pArg);
};

int Processor::AddJob(void *(*_pFunc)(void*), void* _pArg)
{
    //Job addition related code goes here
}


/////////////////////////////////////////////////////////////////////////////
typedef void* (ProcessHandler::*TaskFunc)(void*); 
class ProcessHandler
{
public:
    ProcessHandler(Processor* _pProcessor);
    virtual ~ProcessHandler();
    void* Task(void* a);
    void Init();

private:
    Processor* p_Processor;
};


void* ProcessHandler::Task(void* a)
{
    //Task related code goes here
}

void ProcessHandler::Init()
{
    TaskFunc pFunc1 = &ProcessHandler::Task;
    p_Processor->AddJob(pFunc1,10); //This give the compile error.
}

/////////////////////////////////////////////////////////////////////////
int main()
{
    Processor* pProcessor = new Processor();
    ProcessHandler* pProcessHandler = new ProcessHandler(pProcessor);
    pProcessHandler->Init();
}

3 个答案:

答案 0 :(得分:3)

您只能通过address-of运算符传递静态成员函数。常规成员函数不起作用。你应该考虑使用std :: function。

答案 1 :(得分:1)

在C ++中我建议do_NOT使用指向函数的指针(原始指针也可论证)。 你应该使用std :: function(boost :: function)来获得更多的通用性,或者 模板。后者为您提供了一些性能,但没有更多的类型检查。

答案 2 :(得分:0)

void _pFunc)(void *)是一个C函数指针,因此,您只能通过该指针或静态函数传递C函数。

void (ProcessHandler::*)(void); //Since you already have a Typedef, pass that as 'type'

应该可以帮助您调用成员函数。 称之为:

objectPointer->functionPointer();