変数自体を実行
class Test { /* 省略 */ }; Test var;
とした時に class Test に operator()() を宣言・定義するだけで、
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 ) ); }