gpt4 book ai didi

c++ - 从 Boost signals2 信号调用的仿函数的成员变量不更新

转载 作者:行者123 更新时间:2023-11-30 04:00:53 24 4
gpt4 key购买 nike

我希望下面的完整程序输出数字 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/

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