在我一直在做的一个项目中,我使用了 boost 的信号2。在我开始使用虚拟课程之前,这一直很好。现在插槽不再被调用。以下是我的项目的精简版。
Glue 类创建 VSig 和 Process 类的实例,并将 VSig 中的信号连接到 Process 中的插槽。
IVSig.h:
class IVSig {
public:
boost::signals2::signal<void (void)> sigTest;
virtual void update() = 0;
};
VSig.h:
class VSig : public IVSig {
public:
boost::signals2::signal<void (void)> sigTest;
void update();
};
VSig.cpp:
void VSig::update()
{
printf("updating!\n");
sigTest();
}
进程.h:
class Process {
public:
void process();
};
进程.cpp:
void Process::process()
{
printf("hi!\n");
}
胶水.h:
class Glue {
public:
Glue();
void callUpdate();
private:
IVSig *sig;
Process *proc;
};
胶水.cpp:
Glue::Glue()
{
sig = new VSig();
proc = new Process();
sig->sigTest.connect(boost::bind(&Process::process, proc));
callUpdate();
}
void Glue::callUpdate()
{
sig->update();
}
这应该打印“更新!” 接着是“嗨!” 但只输出“更新!”。
非常感谢任何帮助或建议!