C++ 回调另一个成员函数

use*_*798 0 c++ callback

我有一个关于回调的问题。之前,我将回调与 Q 类关联

class Q{
   using Callback = std::function<void(char*, int)>;
   Q:Q();
   Q:~Q();

   void Q::RegisterCB(Callback callbackfunc)
   {
       callback_func = callbackfunc;
   }

   void Q:someEvent()
   {
      callback_func();
   }
};

void handleCallback( char*, int)
{
   // perform some routine

}

// from my main file
int main()
{
   Q q;
   q.RegisterCB(&handleCallback);

}
Run Code Online (Sandbox Code Playgroud)

这对我来说很有效。但是,当我需要将handleCallback函数转移到另一个类以获得更清晰的代码时。我在使用相同的代码时遇到问题

class R{

   void R::handleCallback( char*, int)
   {
   // perform some routine

   }

   void R::someOp()
   {
       // q is some member variables of R
       q.RegisterCB(&R::handleCallback, this);

   }
Run Code Online (Sandbox Code Playgroud)

};

然而,我遇到了一些问题,说“没有匹配的函数可以调用......”。我认为这只是简单地从函数名称分配到类函数名称

我可以提示一下我可能会出错的地方吗?

问候

mol*_*ilo 5

&R::handleCallback具有类型void (R::*)(char*, int),该类型不可转换为std::function<void(char*, int)>
另外,RegisterCB需要一个参数,而不是两个。

最直接的修复方法是将调用包装在 lambda 函数中,

q.RegisterCB([this](char* p, int x) { handleCallback(p, x); }); 
Run Code Online (Sandbox Code Playgroud)