0
在我一直在努力的項目中,我已經使用了boost的信號2。這工作得很好,直到我開始使用虛擬類。現在插槽不會再被調用。以下是我的項目的精簡版本。虛擬班級提升信號2
Class 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();
}
Process.h:
class Process {
public:
void process();
};
Process.cpp:
void Process::process()
{
printf("hi!\n");
}
Glue.h:
class Glue {
public:
Glue();
void callUpdate();
private:
IVSig *sig;
Process *proc;
};
Glue.cpp:
Glue::Glue()
{
sig = new VSig();
proc = new Process();
sig->sigTest.connect(boost::bind(&Process::process, proc));
callUpdate();
}
void Glue::callUpdate()
{
sig->update();
}
這應打印 '更新!'緊跟着'嗨!'但只輸出'更新!'。
任何幫助或建議,非常感謝!
謝謝!這解決了這個問題。但我不認爲我明白爲什麼解決它。爲VSig創建一個實例,爲什麼在VSig中聲明的信號不會連接到Process中的插槽? – henkbelgium
對不起我之前給出的簡短答案,現在詳細闡述 - 希望現在可以理解。 (請檢查正確的答案)。 – Filipe
是的。謝謝。 – henkbelgium