gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:08:18 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com