私が取り組んできたプロジェクトでは、ブーストのシグナルを利用しました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();
}
これは「更新中!」と出力するはずです。続いて「こんにちは!」ただし、「更新中!」のみを出力します。
ヘルプや提案は大歓迎です!