c++ - 将函数连接到 boost::signal 运行,但不调用该函数

标签 c++ boost-signals

我的代码中有一个类 Yarl,它有一个成员函数 refresh,我想将它绑定(bind)到两个 boost::signal。其中一个信号是 EventHandler 类的成员,定义如下:

class EventHandler {
    public:
        boost::signal<void()> sigRefresh;
};

另一个是另一个文件中的自由 float 信号,声明如下:

namespace utility {
    static boost::signal<void()> signal_refresh;
}

Yarl 的成员函数中,我将 refresh 连接到这样的信号:

    events::EventHandler eventHandler;

    eventHandler.sigRefresh.connect(boost::bind(&Yarl::refresh, this));
    utility::signal_refresh.connect(boost::bind(&Yarl::refresh, this));

后来我这样称呼这两个信号:

sigRefresh();
signal_refresh();

此代码编译并运行,sigRefresh 完全按预期工作。但是,当我调用 signal_refresh 时没有任何反应。据我所知,refresh 从未真正连接到 signal_refresh。有人看到我做错了什么吗?

最佳答案

我猜测您正在多次定义 signal_refresh。声明之前的 static 关键字向我暗示代码片段在头文件中,您必须将 static 放在那里才能编译它而不会出现重新定义的符号错误。如果您这样做了,那么包括 header 在内的每个源文件都将获得 signal_refresh 的唯一拷贝,因此您正在调用的实例可能不是您将其连接到的实例。

我在这里可能完全偏离了标记,但这是可能的。

关于c++ - 将函数连接到 boost::signal 运行,但不调用该函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3206745/

相关文章:

c++ - 如何复制 boost 信号的槽

c++ - 如何获得 boost::signal 的返回类型?

c++ - MFC OnTimer 从其他地方接收额外的事件

c++ - C++ 模板中的名称查找

c++ - Eigen3 矩阵随机

c++ - 释放 : A** mat = new A*[2]; 的内存

c++ - 在 C 应用程序中运行 C++(使用 STL)函数

c++ - Boost::signals2::signal::connect 的原型(prototype)是什么

c++ - 在 boost::signals 中, 'slot_type' 和 'slot_function_type' 有什么区别?

c++ - boost::signals::scoped_connection 在 std::vector 中不起作用。为什么?