関数テンプレート

C++関数テンプレート は、関数のグループの生成方法を定義します。

非テンプレート関数は、テンプレートから生成された特殊化の関数と同じ名前、 およびパラメーター・プロファイルを持っていたとしても、 非テンプレート関数は、関数テンプレートとは関連がありません。 非テンプレート関数は、関数テンプレートの特殊化と見なされることは、ありません。

次の例は、quicksort という名前の関数テンプレートを使用した、QuickSort アルゴリズムをインプリメントします。

#include <iostream>
#include <cstdlib>
using namespace std;
 
template<class T> void quicksort(T a[], const int& leftarg, const int& rightarg)
{
  if (leftarg < rightarg) {
 
    T pivotvalue = a[leftarg];
    int left = leftarg - 1;
    int right = rightarg + 1;
 
  for(;;) {
 
    while (a[--right] > pivotvalue);
    while (a[++left] < pivotvalue);
 
    if (left >= right) break;
 
    T temp = a[right];
    a[right] = a[left];
    a[left] = temp;
  }
 
  int pivot = right;
  quicksort(a, leftarg, pivot);
  quicksort(a, pivot + 1, rightarg);
  }
}
 
int main(void) {
  int sortme[10];
 
  for (int i = 0; i < 10; i++) {
    sortme[i] = rand();
    cout << sortme[i] << " ";
  };
  cout << endl;
 
  quicksort<int>(sortme, 0, 10 - 1);
 
  for (int i = 0; i < 10; i++) cout << sortme[i] << "
  ";
  cout << endl;
  return 0;
}

上記の例は、次に類似する出力を行います。

16838 5758 10113 17515 31051 5627 23010 7419 16212 4086
4086 5627 5758 7419 10113 16212 16838 17515 23010 31051

QuickSort アルゴリズムは、型 T の配列 (これの関係演算子および代入演算子は、定義されている) をソートします。 テンプレート関数は、1 つのテンプレート引き数と 3 つの関数引き数を取ります。

上記の例では、次のステートメントを使用して、quicksort() テンプレート関数を呼び出すこともできます。

  quicksort(sortme, 0, 10 - 1);

コンパイラーが、テンプレート関数呼び出しの使い方とコンテキストにより、テンプレート引き数を推定できる場合、テンプレート引き数を省略できます。 ここでは、コンパイラーは、sortme が、型 int の配列であると推定します。

関連参照

IBM Copyright 2003