c++ - C 函数回调与 C++ 方法回调

标签 c++ callback

我有一个带有 bar() 方法的 Foo 类。 我还有一个 bar2() 函数(在任何类之外) 还有一个 Xpto 类,我需要在其中设置带有一些回调的构造函数。

class Foo
{
  //...
  public:
     bar()
     {
       //do stuff..
     }
  //...
}

//isolated C function outside class
void bar2()
{
}

class Xpto
{
  //...
  public:
     Xpto(std::function<void()> &callback)
     {
       //do stuff..
     }
  //...
}

int main()
{
   Xpto x1(bar2); // <---- compiles

   Foo myFoo;
   Xpto x2(myFoo.bar); // <--- doesn't compile

   return 0;
}

为什么我可以使用 Foo 对象的回调方法创建 Xpto 对象?

最佳答案

因为 myFoo.bar签名不等于 std::function<void()> (因为它是成员函数)。您可以使用 std::bind (并查看使用成员函数指针的正确语法)。

Xpto x2(std::bind(&Foo::bar, std::ref(myFoo)));

关于c++ - C 函数回调与 C++ 方法回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31723833/

相关文章:

c++ - C++ 编译器的异常行为

c++ - 将 std::string 复制到 char*

javascript - NodeJS中传递回调函数变成Object

javascript - socket.io 回调函数不起作用

javascript - 使用 ajax 调用(ajax 和 for)时获取数据的问题

c++ - OpenGL LookAt 函数 : is the up vector arbitrary?

c++ - 在 Mac OS X (El Capitan) 上安装 Cilk Plus 时出错

c++ - 如何减少具有相同名称但不同类型的数据成员的类上的代码重复?

c++ - 现代 C++ 中的类型安全回调系统

ios - 委托(delegate)函数 vs 回调函数