c++ - 绑定(bind)功能麻烦

标签 c++ function boost reference bind

我正在使用 boost(信号 + 绑定(bind))和 C++ 来传递函数引用。这是代码:

#define CONNECT(FunctionPointer) \
        connect(bind(FunctionPointer, this, _1));

我是这样使用的:

class SomeClass {
  void test1() {}
  void test2(int someArg) {}

  SomeClass() {
     CONNECT(&SomeClass::test1);
     CONNECT(&SomeClass::test2);
  }
};

第二个测试函数绑定(bind)有效(test2),因为它至少有一个参数。第一次测试我有一个错误:

‘void (SomeClass::*)()’ is not a class, struct, or union type

为什么我不能传递没有参数的函数?

最佳答案

_1 是一个占位符参数,表示“替换为第一个输入参数”。 test1 方法没有参数。

创建两个不同的宏:

#define CONNECT1(FunctionPointer) connect(bind(FunctionPointer, this, _1));
#define CONNECT0(FunctionPointer) connect(bind(FunctionPointer, this));

但是记住macros are evil .

然后像这样使用它:

class SomeClass {
  void test1() {}
  void test2(int someArg) {}

  SomeClass() {
     CONNECT1(&SomeClass::test1);
     CONNECT0(&SomeClass::test2);
  }
};

关于c++ - 绑定(bind)功能麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3317607/

相关文章:

c++ - 使用cmake的Linux终端上的“Conversion to non-scalar type is requested”错误

javascript - 为什么调用函数时参数不能正确传递?

更改 HTML 的 JavaScript 函数不起作用

c++更新 boost 版本问题

c++ - 为什么 boost 包含两个不同版本的 strong_typedef.hpp?

c++ - 这个boost::bind语句怎么理解?和网上查的不一样

c++ - 没有 "if(...) return ...;"的 "else"是否被认为是好的风格?

c++ - OpenCV 结果在调试/发布和其他机器上发生变化

c++ - 您可以在不下载 SDK 的情况下开始 OpenCL 编程吗?

javascript - 如何从这些嵌套函数中返回图像 blob