やー、今日も書いたよファンクタちゃんたちをたくさんなー。いや、既存コードをファンクタにまとめ直してるだけなわけだけどさー。しかし何だな、やっててひとつ思うのは、関数テンプレートのデフォルトテンプレート引数というものができないという点が、ところどころで、何だよっ、て思うわなー。
こう、コードのちょっとしたところに一行だけ入れるバージョンと入れないバージョンを作りたいと思ったら、そこは本当はその一行のところで呼び出すためだけのファンクタとか指定できるようにして、切り替えて使えるようにしたいのだけれど、そんなときにこのデフォルトテンプレート引数がだめだから結局一行だけ多い2つ目のバージョンをまるごと用意するしかないというかそうするのがいいだろうという思いを何度かしたぞ。。
と思ったら、C++0xでは使えるようになるみたいだ。⇒★
ならば、手元にあるVC++2008SP1でもしかsiteもう出来るのだろうか。
struct Noper { // 何もしないファンクタ void operator()(void){} }; struct Yeah { // さりげなくちょい処理をするファンクタ void operator()( void ){ cout<< "日本語-"; } }; template< class Func/*=Noper*/ >// コメント外すとエラー void say( Func func/*=Noper()*/ )// コメント外すとエラー { cout<< "N88-"; func();// チョイ処理ポイント(何かするかしないかをfuncで制御) cout<< "BASIC"<<endl; }; int main( void ) { say( Noper() ); // ←本当は、say(); とだけ書きたい。 // Noper()なんてわざわざ書きたくない say( Yeah() ); return 0; }
甘かった。いやいやだめだった。やはりVS10まで待たなくてはだめか。
g++とかなら体験できるのだろうか。cygwinでも入れるか。ubuntuか。