株式会社エス・スリー・フォー

11.1 概要

開発者なら誰でも、「このコードは以前に書いたことがあったのでは?」と考えることがあるはずです。C++言語の魅力の 1つに、同じコードを何回も書くことを避け、コードを再利用できることが挙げられます。Tools.h++
コレクションクラスでは、再利用できる C++ 言語の機能が、いくつかあります。

Smalltalk類同コレクションクラスでは、詳細については後で説明しますが、多態性と継承を使ってオブジェクトコードを再利用できるようにしています。この章では、Tools.h++
コレクションクラステンプレート (一般にテンプレートと呼ぶ) での再利用を、例を使って説明します。

テンプレートは、型をパラメータ化したクラス宣言で、ある特定の型のコレクションクラスがどのように動作すべきかを規定します。例えば、Vectorテンプレートは、項目にインデックスを付ける方法、その長さ、サイズ変更の方法などを定義しています。項目の実際の型は、こうした一般的な問題とは無関係です。

収集される項目の型にかまわずに、テンプレートを使って、コレクションに対してコードを書くことにより、ソースコードの大部分を再利用できるようになります。テンプレート機構により、プレースホルダとして機能する正式なテンプレートパラメータを使って、これらの型を表現することができます。その後、コレクションクラステンプレートを利用するときに、実際の型でテンプレートを具体化します。この時点で、コンパイラがクラステンプレートに戻り、最初から書いたかのように、テンプレートにその型を書き込みます。

テンプレートを使わない場合、クラス
VectorOfIntVectorOfDoubleVectorOfFoo
などのコードを書かなければなりません。しかしテンプレートを使うと、たった 1 つのクラス
Vector<T>のコードを書くだけです。このとき、T
はすべての型を表わしています。そして、自由にVector<int>
Vector<double>
Vector<Foo>、またはクラステンプレートを書いたときには考えなかった型のベクトルを作成できます。