作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望下面的完整程序输出数字 42
,但它输出 0
。为什么?
#include <iostream>
#include <boost/signals2/signal.hpp>
class TestFunctor {
public:
TestFunctor() : last_received_value(0) {}
void operator()(const int& i) {
last_received_value = i;
};
int last_received_value;
};
int main(int argc, char* argv[]) {
TestFunctor f;
boost::signals2::signal<void(const int& i)> sig;
sig.connect(f);
sig(42);
std::cout << f.last_received_value << std::endl;
return 0;
}
如果将 main()
替换为以下内容,我将得到预期的输出 42
:
int main(int argc, char* argv[]) {
TestFunctor f;
f(42);
std::cout << f.last_received_value << std::endl;
return 0;
}
我怀疑问题是 TestFunctor
实例的拷贝实际上被连接到了信号上。我怎样才能防止这种情况(或者甚至可能)?
最佳答案
需要通过ref注册回调:
sig.connect(boost::ref(f));
否则,插槽会获取仿函数 f
的拷贝,并更新拷贝。
关于c++ - 从 Boost signals2 信号调用的仿函数的成员变量不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26048422/
我是一名优秀的程序员,十分优秀!