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

标签 c++

我需要将指向成员函数的指针作为参数传递给另一个类中的成员函数。我正在做的是像下面这样的事情。 我想用 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/

相关文章:

c++ - 从音频缓冲区和视频缓冲区 C++ Windows 构造 mp4 文件

c++ - getchar_unlocked() VS scanf() VS cin

c++ - 从字符串中给定结束索引的字符串复制子字符串

c++ - 依赖遍历器中缺少 Dll

c++,从文件读取到结构,然后读取到 vector (结构被插入 vector 太多次而不是一次)

c++ - 通过引用传递 vector

c++ - 删除指向指针的指针(作为数组数组)

c++ - 将整数读入不同的 vector

c++ - 理解模板中的 const

c++ - 尝试在 C++ 函数中添加数组的整数失败