トップページ > 関数型プログラミング >
boost::signals2 という後継ライブラリがリリースされています
#include <iostream>
#include <boost/signal.hpp>
using namespace std;
void Dog(int c)
{
for(int i=0; i!=c; ++i)
cout << "BowWow" << endl;
}
void Cat(int c)
{
for(int i=0; i!=c; ++i)
cout << "Mewmew" << endl;
}
void Chicken(int c)
{
for(int i=0; i!=c; ++i)
cout << "cock-a-doodle-doo" << endl;
}
int main()
{
// 登録
boost::signal<void (int)> sig;
sig.connect( &Dog );
sig.connect( &Cat );
sig.connect( &Chicken );
// 呼び出し
sig( 2 );
return 0;
}
Mewmew Mewmew cock-a-doodle-doo cock-a-doodle-doo BowWow BowWow
単にconnectすると、登録した順に呼び出されます。 順番を指定してconnectすることもできます。
複数の関数を入れておける boost::function
と思えばいいかも。
上のサンプルをご覧になれば、何ができるライブラリなのかは、 皆さんきっとすぐに理解されたことと思われます。 複数の関数を登録しておいて、一度に呼び出すことが出来ます。 Qt で採用されている Signal & Slot という概念の実装らしい。 私はQtを使ったことがないのでよく知らないのですが、 例えば、イベントハンドラを登録しておいて、イベント発生時に呼び出す、 みたいな使い方が出来ますね。