C의 함수 템플릿 부분 특수화: 설명
C에서는 함수 템플릿 부분 특수화가 표준에 의해 허용되지 않습니다. 그러나 Microsoft Visual Studio 2010 Express와 같은 특정 컴파일러에서는 확장으로 부분 특수화를 허용할 수 있습니다.
함수 템플릿의 부분 특수화에는 특정 인수 집합을 사용하여 템플릿에 대한 특정 구현을 정의하는 작업이 포함됩니다. 전체 특수화와 부분 특수화를 모두 허용하는 클래스 템플릿과 달리 함수 템플릿은 전체 특수화만 지원합니다.
다음 코드를 고려하세요.
template <typename T1, typename T2> inline T1 max(T1 const& a, T2 const& b) { return a < b ? b : a; } template <typename T> inline T const& max(T const& a, T const& b) { return 10; }
이 코드는 최대 함수 템플릿을 부분적으로 특수화하는 것으로 보입니다. 동일한 유형의 인수입니다. 그러나 이는 실제로 부분 전문화의 경우는 아닙니다. 대신 두 번째 함수 템플릿은 이름은 같지만 매개변수 유형이 다른 첫 번째 함수 템플릿의 오버로드된 버전입니다.
허용되는 경우 함수 템플릿의 부분 특수화 구문은 다음과 유사합니다.
template <typename T> inline T const& max<T, T>(T const& a, T const& b) { return a; }
제공된 코드에서 두 번째 max 함수는 두 인수의 유형이 동일한 경우를 처리하기 위해 오버로드됩니다. 이는 부분 특수화가 아니라 인수 유형을 기반으로 한 오버로드입니다.
함수 템플릿 부분 특수화를 지원하는 컴파일러는 C 표준을 따르지 않는 코드를 허용할 수 있다는 점에 유의하는 것이 중요합니다. 이식 가능한 코드는 이러한 확장에 의존하지 않아야 합니다.
위 내용은 C가 함수 템플릿의 부분 특수화를 허용하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!