함수 템플리트 (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이 빠른 정렬 알고리즘은 T 유형의 배열을 정렬합니다 (관계 및 대입 연산자가 정의되어 있음). 템플리트 함수는 하나의 템플리트 인수와 세 개의 함수 인수를 사용합니다.- 정렬할 배열의 유형,
T - 정렬할 배열의 이름,
a - 배열의 하한,
leftarg - 배열의 상한,
rightarg
quicksort() 템플리트 함수를 호출할 수도 있습니다. quicksort(sortme, 0, 10 - 1);컴파일러가 템플리트 함수 호출의 사용법과 컨텍스트를 사용하여 템플리트 인수를 추론할 수 있는 경우 템플리트 인수를 생략할 수 있습니다. 이 경우 컴파일러는 sortme 가 int유형의 배열임을 추론합니다.
C++11 만의 시작.
템플리트 매개변수 팩 은 함수 템플리트의 템플리트 매개변수 유형일 수 있으며 함수 매개변수 팩 은 함수 템플리트의 함수 매개변수 유형일 수 있습니다. 자세한 정보는 Variadic 템플리트 (C++11)를 참조하십시오.
함수 템플리트에 대해 후행 리턴 유형을 사용할 수 있습니다. 여기에는 다음과 같은 유형의 리턴 유형이 있습니다.
- 함수 인수의 유형에 따른 리턴 유형
- 복잡한 리턴 유형
자세한 정보는 후행 리턴 유형 (C++11)을 참조하십시오.
C++11 의 끝.
관련 정보