我有一个关于使用 tr1::function 回调的问题。我定义了以下内容:
class SomeClass {
public:
typedef std::tr1::function<void(unsigned char*, int)> Callback;
void registerCallback(Callback);
private:
Callback callback;
}
Run Code Online (Sandbox Code Playgroud)
我定义了另一个类:
class SomeOtherClass {
void myCallback(unsigned char*, int);
}
Run Code Online (Sandbox Code Playgroud)
现在我想使用方法“registerCallback”将我的函数“myCallback”注册为“SomeClass”类的回调。但是,它不起作用。我查看了该函数的 boost 文档,使用类的(成员)方法进行回调似乎是合法的。我错了吗?
提前致谢!
成员函数有一个隐式的第一个参数,一个this指针,以便知道要在哪个对象上调用该函数。通常,它对您隐藏,但要将成员函数绑定到 std::function,您需要在模板参数中显式提供类类型。
#include <functional>
#include <iostream>
struct Callback_t {
void myCallback(int)
{
std::cout << "You called me?";
}
};
class SomeClass {
public:
SomeClass() : callback() { }
typedef std::function<void(Callback_t*, int)> Callback;
// ^^^^^^^^^^^
void registerCallback(const Callback& c)
{
callback = c;
}
void callOn(Callback_t* p)
{
callback(p, 42);
}
private:
Callback callback;
};
int main()
{
SomeClass sc;
sc.registerCallback(&Callback_t::myCallback);
Callback_t cb; // we need an instance of Callback_t to call a member on
sc.callOn(&cb);
}
Run Code Online (Sandbox Code Playgroud)
输出:You called me?;