함수 템플릿 추론의 부분 순서
문제:
C 11 표준은 다음을 설명합니다. 기능 템플릿의 전문화를 비교하기 위한 부분 주문 절차이지만 그 의미가 완전히 명확하지는 않습니다. 예를 들어 설명을 제공할 수 있습니까?
답변:
한 기능 템플릿이 다른 기능 템플릿보다 더 전문적인지 확인하기 위해 표준에서는 부분 주문 절차를 사용합니다. 이 절차에는 각 템플릿에 대해 변환된 함수 유형을 생성하고 이를 비교하여 어떤 템플릿이 더 전문적인지 결정하는 작업이 포함됩니다.
1단계: 변환된 함수 유형 생성
각 템플릿에 대해 변환된 함수 유형은 유형 매개변수를 특정 유형(합성 유형이라고 함)으로 대체하여 생성됩니다. 이러한 합성 유형은 고유하며 코드의 다른 곳에서는 사용되지 않습니다.
2단계: 변환된 유형을 원래 템플릿과 일치
첫 번째 템플릿의 변환된 함수 유형이 일치됩니다. 두 번째 템플릿의 원래 함수 유형에 대해. 그런 다음 프로세스가 반대 방향으로 반복됩니다.
3단계: 전문화 결정
한 변환에서 일치 항목이 생성되고 다른 변환에서는 일치 항목이 생성되지 않으면 일치된 템플릿이 있는 템플릿이 생성됩니다. 변환은 보다 전문적인 것으로 간주됩니다. 어느 방향에서든 일치하는 항목이 없으면 두 템플릿 모두 다른 템플릿보다 더 전문화된 것으로 간주되지 않습니다.
예:
두 가지 기능 템플릿을 고려하세요.
template<typename T, typename U> void foo(T, U); // #1 template<typename T> void foo(T const*, X<T>); // #2
#1b의 변환된 함수 유형(void foo(int, bool))을 #2의 원래 함수 유형과 일치 (#2) 실패합니다. 그러나 변환된 함수 유형 #2b(void foo(char const*, X
따라서 함수 템플릿 #2 기능 템플릿 #1보다 더 전문적입니다.
추가 참고 사항:
이 부분은 주문 절차는 부분 클래스 템플릿 전문화의 전문화를 비교하는 데에도 사용됩니다. 이 경우 절차에는 먼저 각 전문화에 대한 가상의 기능 템플릿을 생성한 다음 동일한 규칙을 사용하여 이러한 기능 템플릿을 비교하는 것이 포함됩니다.
위 내용은 C 11의 부분 순서는 어떻게 보다 전문화된 기능 템플릿을 결정합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!