如何将方法作为回调传递给另一个类?

2 c++ callback

我有一个关于使用 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 文档,使用类的(成员)方法进行回调似乎是合法的。我错了吗?

提前致谢!

jro*_*rok 6

成员函数有一个隐式的第一个参数,一个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?;