【问题标题】:Member variable of functor called from a Boost signals2 signal does not update从 Boost 信号 2 信号调用的函子的成员变量不更新
【发布时间】:2014-09-25 21:28:34
【问题描述】:

我希望下面的完整程序输出数字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 实例的副本实际上已连接到信号。我怎样才能防止这种情况(或者甚至可能)?

【问题讨论】:

    标签: c++ boost signals-slots functor


    【解决方案1】:

    你需要通过 ref 注册回调:

    sig.connect(boost::ref(f));
    

    否则,槽获得函子f的副本并更新副本。

    【讨论】:

      猜你喜欢
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 1970-01-01
      相关资源
      最近更新 更多