다음을 통해 공유


함수 템플릿

클래스 템플릿 클래스 인스턴스 생성 시 전달 된 형식 인수를 기반으로 하는 관련된 클래스의 패밀리를 정의 합니다.함수 템플릿을 함수 패밀리를 정의할 수 있지만 템플릿 클래스와 비슷합니다.함수 템플릿을 사용 하면 같은 코드 있지만 act에서 다른 형식이 나 클래스를 기반으로 하는 함수 집합을 지정할 수 있습니다.다음 함수 템플릿을 두 항목을 변경합니다.

// function_templates1.cpp
template< class T > void MySwap( T& a, T& b ) {
   T c(a); 
   a = b; 
   b = c;
}
int main() {
}

이 코드의 인수 값을 바꾸기 함수 패밀리를 정의 합니다.이 서식 파일을 대체 하는 기능을 생성할 수 있습니다 int 및 형식 및 사용자 정의 형식입니다.MySwap클래스의 복사 생성자와 할당 연산자를 올바르게 정의 된 경우 클래스도 바뀝니다.

컴파일러의 종류를 알고 있기 때문에 또한 함수 템플릿을 하면 서로 다른 유형의 객체를 교체 해도에서 막을 수 있는 a 및 b 매개 변수 컴파일 타임.

템플릿에 기반 하지 않은 함수에서이 기능을 수행할 수 있지만 void 포인터를 사용 하 여 형식 안전 템플릿 버전이입니다.다음 호출을 참조 하십시오.

int j = 10;
int k = 18;
CString Hello = "Hello, Windows!";
MySwap( j, k );          //OK
MySwap( j, Hello );      //error

두 번째 MySwap 호출 컴파일러를 생성할 수 있기 때문에 컴파일 타임 오류를 트리거하는 MySwap 함수를 다른 유형의 매개 변수를 사용 합니다.Void 포인터를 사용 하는 경우 모두 함수 호출을 제대로 컴파일되지 않지만 런타임에 함수가 제대로 작동 하지 않습니다.

명시적 템플릿 인수를 함수 템플릿에 대 한 사양을 사용할 수 있습니다.예를 들면 다음과 같습니다.

// function_templates2.cpp
template<class T> void f(T) {}
int main(int j) {
   f<char>(j);   // Generate the specialization f(char).
   // If not explicitly specified, f(int) would be deduced.
}

템플릿 인수를 명시적으로 지정 하면 함수 인수가 해당 함수 템플릿 매개 변수의 형식으로 변환 합니다 표준 암시적 변환이 수행 됩니다.위 예제에서는 컴파일러가 변환 합니다 (char j)를 입력 합니다 int.

참고 항목

참조

함수 템플릿 인스턴스화

명시적 인스턴스화

함수 템플릿의 명시적 특수화

기타 리소스

서식 파일