6.3.2.3 テンプレートクラス関数メンバーの明示的インスタンス化
6.3.2.4 テンプレートクラスの静的データメンバーの明示的インスタンス化
テンプレートは、 入れ子にして使用できます。これは、標準 C++ ライブラリで行う場合のように、一般的なデータ構造に関する汎用関数を定義する場合に特に便利です。たとえば、テンプレート配列クラスに関して、テンプレートのソート関数を次のように宣言することができます。
template <class Elem> void sort(Array<Elem>);
また、次のように定義することができます。
template <class Elem> void sort(Array<Elem> store)
{int num_elems = store.GetSize();
for (int i = 0; i < num_elems-1; i++)
for (int j = i+1; j < num_elems; j++)
if (store[j-1] > store[j])
{Elem temp = store[j];
store[j] = store[j-1];
store[j-1] = temp;}}
前述の例は、事前に宣言された Array クラステンプレートのオブジェクトに関するソート関数を定義しています。次の例はソート関数の実際の使用例を示しています。
Array<int> int_array(100); // construct an array of ints sort(int_array); // sort it