绑定功能麻烦

时间:2010-07-23 11:12:11

标签: c++ function boost reference bind

我正在使用boost(signals + 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);
  }
};

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

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

为什么我不能在没有参数的情况下传递函数?

1 个答案:

答案 0 :(得分:4)

_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);
  }
};