> 백엔드 개발 > C++ > 부분 정렬은 함수 템플릿 간의 전문화를 어떻게 결정합니까?

부분 정렬은 함수 템플릿 간의 전문화를 어떻게 결정합니까?

Barbara Streisand
풀어 주다: 2024-12-02 07:18:12
원래의
773명이 탐색했습니다.

How Does Partial Ordering Determine Specialization Between Function Templates?

템플릿 추론의 부분 주문 절차

템플릿 추론의 부분 주문 절차는 두 기능 템플릿 간의 전문화 관계를 결정합니다. 여기에는 두 단계가 포함됩니다.

1단계: 변환

각 템플릿에 대해 부분 주문 절차는 모든 유형, 비유형을 대체하여 "변환된 함수 유형"을 생성합니다. 및 고유하고 사용되지 않는 유형이 있는 템플릿 템플릿 매개변수.

2단계: 비교

변환된 함수 유형은 두 가지 방법으로 비교됩니다.

  • 순방향 일치: 템플릿 1의 변환된 함수 유형이 원본과 일치합니다. 템플릿의 함수 유형 2.
  • 역방향 매칭: 변환된 함수 템플릿 2의 유형은 템플릿 1의 원래 함수 유형과 일치합니다.

일치 중 하나가 성공하고 다른 하나는 실패하면 일치에 성공한 템플릿이 더 특수화된 것으로 간주됩니다. 어느 쪽도 일치하지 않으면 어느 템플릿도 더 전문화되지 않은 것입니다.

예:

다음 두 가지 기능 템플릿을 고려하세요.

template<typename T, typename U>
void foo(T, U); // Template 1

template<typename T>
void foo(T const*, X<T>); // Template 2
로그인 후 복사

결정하려면 어떤 템플릿이 더 전문적인지 우리는 다음을 수행합니다.

1. 변환된 함수 유형 생성:

  • 템플릿 1 변환: void foo(int, bool)
  • 템플릿 2 변환: void foo(char const*, X)

2. 변환된 함수 유형 비교:

  • 정방향 일치: void foo(int, bool)는 void foo(T const*, X)와 일치할 수 없습니다.
  • 역방향 일치: void foo(char const*, X)는 void foo(T, U) T = char const* 및 U = X를 추론합니다.

결론: 템플릿 2는 템플릿 1보다 더 전문적입니다.

위 내용은 부분 정렬은 함수 템플릿 간의 전문화를 어떻게 결정합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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