プログラミング言語C++ 第3版

int()は0、bool()はfalse
著:Bjarne Stroustrup アジソン・ウェスレイ*1

数年に1回、C++で短期で開発しなければならない状況に陥ります。今回はTx*2やsary*3を使ってのテキスト処理。
C++の言語仕様も、第1版*4やTurbo C++、Zortech C++から考えると、その巨大さには目もくらむばかり。関数オーバーロード演算子再定義があるだけで嬉しかったあの頃が懐しい。
第3版も出てから10年以上たつんですが、せっかく数年ぶりにC++で書くならば、と、今回はテンプレートと関数オブジェクトに挑戦してみました。ちなみに前回のテーマは、using namespaceの使い方と、setjmp/longjmpせずに例外処理。
関数へのポインタを渡したくなっちゃうところで関数オブジェクトを使う方法が良くわかっていなかったのですが、__gnu_cxx::hash_map 用のハッシュ関数を定義してみて、やっと自分の血肉になった感じ。T (*foo)(A, B, ...) は template<class T,class A,class B,...> struct foo { T operator()(A, B, ...){...} }; と foo<T,A,B,...>() に機械的に書き換え、でいいのか。
この仕事のおかげで、g++のテンプレート関係のエラーメッセージ、何が書いてあるのかはよくわからないけど、何が言いたいのかは、心にずんと伝わってくるようになりました。『よくわかる現代魔法』(桜坂洋) *5でこよみがのコードを体で感じ取るのって、こういう感覚なのかもしれません。