平鍋です.
Andrei Alexandrescu, "Modern C++ Design"
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/
「ソフトウェア職人気質」の訳者でもある村上さんが訳されていま
す.C++ のジェネリックプログラミングに興味がある方必見です.
例えば,「デザインパターン」をテンプレートで表現する試みが解
説されています.一般には,パターンの使用には設計時のトレード
オフがあり,実際に実装する際にはそのトレードオフを考慮し,実
装に落とし込むのが,現在一般に行われているデザインパターンの
利用法です.
ここで提案されているのは,そのトレードオフを「ポリシー」とし
て抜きだし,テンプレートパラメータにすることです.テンプレー
トパラメータは(関数の引数などと違って)未知のクラスを受け入れ
ることができます.
例えば,Singleton ですと,Lifetime(オブジェクトの寿命),
ThreadModel(マルチスレッド対応)が,ポリシーとして抜き出さ
れ,それらを表現するクラスがテンプレート引数となります.
あと,ちょっと感動したのは,「コンパイルタイム・アサート」
template<bool> struct CTAssert;
template<> CTAssert<true> { };
です.コンパイル時に真と評価されるもののみ,コンパイルされます.
CTAssert< sizeof(char) < sizeof(int) >;
みたいに,使うことができます.
以上です.