私は現在、コールバックを介して他の多くのオブジェクトに通知できるクラスを持っています:
class Callback {
virtual NodulesChanged() =0;
virtual TurkiesTwisted() =0;
};
class Notifier
{
std::vector<Callback*> m_Callbacks;
void AddCallback(Callback* cb) {m_Callbacks.push(cb); }
...
void ChangeNodules() {
for (iterator it=m_Callbacks.begin(); it!=m_Callbacks.end(); it++) {
(*it)->NodulesChanged();
}
}
};
これを変更してブーストのシグナルとスロットを使用することを検討しています。これは、特に、呼び出し先が削除されたときにポインターがぶら下がる可能性を減らすのに役立つためです。ただし、現状では、boost のシグナルは、関数オブジェクトを処理する方向に向いているようです。接続と通知の側面に対処するためにシグナルとスロットを使用し、コールバック インターフェイスを引き続き使用するようにコードを適応させる最良の方法は何でしょうか?