我正在使用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
为什么我不能在没有参数的情况下传递函数?
答案 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);
}
};