我需要将指向成员函数的指针作为参数传递给另一个类中的成员函数。我正在做的是像下面这样的事情。 我想用 void* ProcessHandler::Task(void* a) 作为第一个参数调用 int Processor::AddJob(void (_pFunc)(void*), void* _pArg) 方法。 我是这样做的
TaskFunc pFunc1 = &ProcessHandler::Task;
p_Processor->AddJob(pFunc1,10);
但是报错
error: no matching function for call to Processor::AddJob(void* (ProcessHandler::&)(void), int)’ Processor.h:47: note: candidates are: 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();
}
最佳答案
您只能通过寻址运算符传递静态成员函数。常规成员函数不起作用。您应该考虑使用 std::function。
关于C++ 将指向成员函数的指针作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11629007/