Entry

今読んでる本 - 『C++ テンプレート完全ガイド』

2010年04月10日

そんなに書くこともないので,今読んでる本とか。

C++ テンプレート完全ガイド (Programmer’s SELECTION)
David Vandevoorde Nicolai M. Josuttis
翔泳社
売り上げランキング: 56670

勝手ながら,翔泳社の C++ 本は分厚い割に内容が薄い印象があって,あまり食指が伸びなかったんですけれど,本書はおすすめ。C++ のテンプレート機能にまつわる話が,うまくまとまっています。

C++ のテンプレート機能というのは,例えば次のようなもの。

#include <iostream>

template<typename T>
const T& max(const T& a, const T& b) {
  return (a > b) ? a : b;
}

int main(int argc, char* argv[]) {
  std::cout << max(10, 4) << std::endl;
  std::cout << max(0.57, 3.14) << std::endl;
  return 0;
}

テンプレート関数 max は,ふたつの引数のうち大きい方の値を返します。C++ は型付き言語なので,テンプレートを使わないとしたら,int 型用の max 関数と double 型の max 関数を作らないといけません。しかし,テンプレート機能は,こうした型を抽象化することで,ひとつの定義で複数の型を扱うことができるようになります。これが基本的な使い方。

一方,テンプレート機能を型を抽象化できる機能として位置づけると,もっといろいろなことができるようになります。そのいくつかはパターン化されていて,例えば,クラスに機能を埋め込むことができる Policy パターンや,基底クラスが派生クラスの機能を使うことができる CRTP,boost::any でも使われている Type Ensure パターンなんてもんがあります。こゆパターンは,言ってみればテンプレートの現代的な使われ方で,ちゃんとマスターしようと思わないと身に付かなかったりします。

本書は,テンプレートの超基本から,boost ライブラリで使われている現代的なテンプレートパターンあたりまで,かなり詳しく解説しています。テンプレート機能を使ったことがない向きも,はじめから丁寧に読んでいけば,boost や STL を理解できるくらいまでのテクニックを身に付けることができるはず。

テンプレートの使い方には,もっとマニアックなテクニックがあって,例えばテンプレートメタプログラミングなんてのがあります。本書では,テンプレートを使ったメタプログラミングを少しだけ扱っているけれども,本格的にやるなら,同じく翔泳社から出版されている『C++テンプレートメタプログラミング』を参照する方がいいと思います。

C++テンプレートメタプログラミング (Programmer’s SELECTION)
アレクセイ・グルトヴォイ デビッド・エブラハムズ
翔泳社
売り上げランキング: 82588

C++ のテンプレート機能は,少し前までマニアックな機能といった位置づけだったけれども,この頃は方法論がある程度確立されて,一般的なプログラミングテクニックになってきました。何より,Java や C# にない C++ 独自の機能として(※ジェネリック型はテンプレートとまったく異なる別物です。念のため。),静的プログラミングの真髄を極めてみるのも面白いかも。

また,本書では,テンプレートの使い方はもちろんとして,ソースファイルの構成方法やデバッグテクニックについても議論しています。学生プログラミングだったら,使い方だけ分かってりゃ課題をこなせるけれども,職業プログラマとしては保守やデバッグも含めたトータルの開発手法がなければ,安心して使えません。こうした開発の実際について議論している書籍は,他にあまりないんじゃないかと思います。

正直,この頃のコンピュータ本は退屈なもんが多くて困っていたんですけれど,久しぶりに骨のある書籍が出版されて,楽しんでいます。参考書籍も多くておすすめ。

Trackback
Trackback URL:
Ads
About
Search This Site
Ads
Categories
Recent Entries
Log Archive
Syndicate This Site
Info.
クリエイティブ・コモンズ・ライセンス
Movable Type 3.36
Valid XHTML 1.1!
Valid CSS!
ブログタイムズ

© 2003-2012 AIAN