我正在使用 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/