Modern C++ Design

『Modern C++ Design—ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術 (C++ In‐Depth Series)』

C++ Templateとは何か?

  • C++初心者にとってはSTLを使う際のおまじない。
  • C++中級者にとっては便利な機能。
  • C++上級者にとっては新たな言語。

といったところではないだろうか。
この本は「もう一つの言語」としてのTemplateを追求している。クックブックのような目に見えて便利な本という訳ではないが、一歩先に進むためには必要な要素を持っている。例としてポリシーという設計手法を紹介しよう。
ポリシーとは、Templateクラスに何らかの特徴を表すTemplateパラメータを注入してカスタマイズする、という手法である。本書で扱われるLokiだけではなくSTLやboostでも多用されており、C++ Templateを用いた設計の基本と言っても良いだろう。
ポリシーを用いたライブラリは保守性も高い。例えば、Templateパラメータが3つありそれぞれに選択肢が3つあるとすれば、本体1+ポリシー3*3のコード量で3*3*3=27通りのクラス実体を表現出来る。しかも、コード重複がないのでバグ修正も容易である。
ポリシーを用いたライブラリは実行効率も良い。例えば、関数ポインタを利用すれば同様の振る舞いを実現することが出来るが、関数ポインタの占めるメモリは無駄になるし、それが関数ポインタである以上最適化の障害になる。他にも多重継承Mix-inを利用して同様の振る舞いを実現することが出来るが、関数ポインタとほとんど同じ結果になる。
私はコーディングが出来ない人物にソフトウェアの設計は無理だと思っている。そのような設計でも上手くいくのはソフトウェア以外でも実現が容易だが、経費を安くするためにソフトウェアを利用する場合くらいだろう。その場合もコーディングも設計も出来る人物が担当すればより優れたものが作れるのではないか?