オブザーバーには「void notify(std::string)」関数があり、オブザーバブル オブジェクトは登録されたすべてのオブザーバーでそれを呼び出し、トークン化された文字列を使用してデータを転送する、単純なオブザーバー パターンを作成しました。これは非常にシンプルで簡単で機能しますが、一歩前進する必要があります。
シグナルとスロットを使用して実装する必要があります (たとえば、boost::signals2 を使用)。ただし、スロットと信号がどのように見えるか、どのように配置する必要があるかはわかりません。また、void(文字列)だけでなく、必要な関数を登録できるようにする方法もわかりません。
このパターンにシグナルとスロットを使用する適切なリソースが見つかりませんでした。それでも、シグナルとスロットはオブザーバーパターンにとって素晴らしいと誰もが言います。オブザーバー パターンにシグナルとスロットをどのように使用すればよいか教えていただけますか?
シグナルなしの現在の実装は次のとおりです。
class observable
{
public:
void register(observer *);
void unregister(observer *);
protected:
void notifyObservers()
{
for every registered observer
observer.notify(std::string tokenized_string);
}
}
class observer
{
public:
void notify(std::string) = 0;
}
シグナルとスロットを使用するようにこのパターンを変更する必要がありますが、便利で適切に設計され、柔軟になる方法がわかりません。