我的代码中有一个类 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/