> 백엔드 개발 > C++ > C 11의 부분 순서는 어떻게 보다 전문화된 기능 템플릿을 결정합니까?

C 11의 부분 순서는 어떻게 보다 전문화된 기능 템플릿을 결정합니까?

Susan Sarandon
풀어 주다: 2024-12-05 10:37:10
원래의
690명이 탐색했습니다.

How Does C  11's Partial Ordering Determine More Specialized Function Templates?

함수 템플릿 추론의 부분 순서

문제:

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))를 원래 함수 유형 #1(#1)과 일치시키는 것은 성공합니다.

따라서 함수 템플릿 #2 기능 템플릿 #1보다 더 전문적입니다.

추가 참고 사항:

이 부분은 주문 절차는 부분 클래스 템플릿 전문화의 전문화를 비교하는 데에도 사용됩니다. 이 경우 절차에는 먼저 각 전문화에 대한 가상의 기능 템플릿을 생성한 다음 동일한 규칙을 사용하여 이러한 기능 템플릿을 비교하는 것이 포함됩니다.

위 내용은 C 11의 부분 순서는 어떻게 보다 전문화된 기능 템플릿을 결정합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿