変数自体を実行

class Test { /* 省略 */ };

Test var;

とした時に class Testoperator()() を宣言・定義するだけで、

var();

と実行する関数を作ることが出来る。


STLの一部のアルゴリズムでは関数の実行結果で判定を行うのだが、

operator()( iter->Item )

という形で処理するようにしており、それらの predicator が必要なアルゴリズムには
operator()() を実装したクラスが必要になる。


そういう際には以下の様なテンプレートを用意しておくと楽になる。

template < typename Ret, typename Class >
class predicate
{
	Ret ( *m_func )( Class );

  public:
	explicit predicate( Ret ( *func )( Class ) ) : m_func( func ) {}
	Ret operator()( Class cls ) { cls.m_func(); }
};

という様になる。


実行する時は以下の様に使う

bool check( string & str )
{
	for( char *p = str.c_str(); *p != '\0'; p++ )
	{
		if( !isalpha( *p ) ) { return false; }
	}

	return true;
}

void function()
{
	list< string > lst;
	list< string >::iterator iter;
	
	iter = find_if( lst.begin(), lst.end(), predicate< bool, string& >( check ) );
}