gpt4 book ai didi

c++ - boost::signals2::signal 给出错误的输出?

转载 作者:行者123 更新时间:2023-11-30 05:39:34 25 4
gpt4 key购买 nike

我是 boost 库的新手,在练习绑定(bind)示例时,我编写了以下代码。但是,似乎“res”计算正确,但正确的结果没有传回信号。请帮忙,下面的代码片段有什么问题。代码在 http://cpp.sh/ 上编译并运行

#include <iostream>
#include<boost/signals2.hpp>

using namespace std;
class MathObject{
public:
int AddOps(int op1, int op2);
};

int MathObject::AddOps(int op1, int op2){
int res = op1 + op2;
cout << "Result of AddOps: " << res << endl;
return res;
}

int main(void){
MathObject mObj;
boost::signals2::signal<int(int)> incrementer;
incrementer.connect(boost::bind(&MathObject::AddOps, &mObj, 1, _1));
boost::signals2::signal<int(int)> doubler;
doubler.connect(boost::bind(&MathObject::AddOps, &mObj, _1, _1));
cout << "Incrementer of 5" << incrementer(5) << endl;
cout << "Doubler of 5" << doubler(5) << endl;
}

输出:

Result of AddOps: 6
Incrementer of 51
Result of AddOps: 10
Doubler of 51

最佳答案

当一个信号被调用时,它可能有也可能没有连接到它的任何处理程序。因此它可能会或可能不会产生结果。默认行为是返回最后连接的处理程序的结果,如果有的话;或者返回一个表示“无结果”的值。因此 incrementer(5) 的返回值和 doubler(5)不是 int ,而是一个 boost::optional<int> .

这导致您观察到的输出,因为 boost::optional<int>可以隐式转换为 bool ,然后转换为 1 的输出或 0 .

您需要先检查结果是否存在,然后从 boost::optional<int> 中获取结果返回:

#include <iostream>
#include<boost/signals2.hpp>

using namespace std;
class MathObject{
public:
int AddOps(int op1, int op2);
};

int MathObject::AddOps(int op1, int op2){
int res = op1 + op2;
cout << "Result of AddOps: " << res << endl;
return res;
}

int main(void){
MathObject mObj;
boost::signals2::signal<int(int)> incrementer;
incrementer.connect(boost::bind(&MathObject::AddOps, &mObj, 1, _1));
boost::signals2::signal<int(int)> doubler;
doubler.connect(boost::bind(&MathObject::AddOps, &mObj, _1, _1));
boost::optional<int> incremented = incrementer(5);
if (incremented) {
cout << "Incrementer of 5: " << *incremented << endl;
}
boost::optional<int> doubled = doubler(5);
if (doubled) {
cout << "Doubler of 5: " << *doubled << endl;
}
}

关于c++ - boost::signals2::signal 给出错误的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32299653/

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