我有一个关于回调的问题。之前,我将回调与 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)
};
然而,我遇到了一些问题,说“没有匹配的函数可以调用......”。我认为这只是简单地从函数名称分配到类函数名称
我可以提示一下我可能会出错的地方吗?
问候
&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)