boost::signals

トップページ > 関数型プログラミング >

abstract

boost::signals2 という後継ライブラリがリリースされています

必要なヘッダ
<boost/signal.hpp>
出来ること
Signal/Slot
リファレンス
en

sample

#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することもできます。

etc

複数の関数を入れておける boost::function と思えばいいかも。

上のサンプルをご覧になれば、何ができるライブラリなのかは、 皆さんきっとすぐに理解されたことと思われます。 複数の関数を登録しておいて、一度に呼び出すことが出来ます。 Qt で採用されている Signal & Slot という概念の実装らしい。 私はQtを使ったことがないのでよく知らないのですが、 例えば、イベントハンドラを登録しておいて、イベント発生時に呼び出す、 みたいな使い方が出来ますね。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0