>백엔드 개발 >C++ >C 템플릿 추론은 부분 순서를 사용하여 전문화를 어떻게 결정합니까?

C 템플릿 추론은 부분 순서를 사용하여 전문화를 어떻게 결정합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-02 10:20:12350검색

How Does C   Template Deduction Determine Specialization Using Partial Ordering?

템플릿 추론에서 부분 주문 절차

부분 주문 절차는 C 템플릿 추론에서 기능 템플릿 간의 특수화 관계를 결정합니다. 여기에는 각 템플릿에 대해 변환된 함수 유형을 생성하고 이를 비교에 사용하는 작업이 포함됩니다.

  1. 변환된 함수 유형:
    각 템플릿에 대해 고유한 함수 유형을 대체하여 변환된 함수 유형이 생성됩니다. 함수 유형의 템플릿 매개변수 유형.
  2. 인수 및 일치 매개변수:
    다음 두 가지 경우를 사용하여 한 템플릿의 변환된 함수 유형이 다른 템플릿의 원래 함수 템플릿과 일치됩니다.

    • 변형된 유형-1을 인수 템플릿으로 사용하고 원본 템플릿-2를 매개변수 템플릿으로
    • 유형-2를 인수 템플릿으로, 원본 템플릿-1을 매개변수로 변환 template
  3. 성공 및 순서 일치:
    형 추론이 두 경우 모두 변환된 함수 유형을 원래 함수 템플릿과 성공적으로 일치시킬 수 있다면 하나의 템플릿이 더 좋습니다. 다른 것보다 전문적이다. 양방향에서 성공적으로 일치하는 경우 두 템플릿 모두 더 전문화되지 않습니다.

예:

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

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

template<typename T>
void foo(T const*, X<T>); // original #2

변형된 매칭 유형:

  • 1b 대 #2: 유형 추론은 매개변수와 일치할 수 없습니다.

  • 2b 대 #1: 유형 추론은 매개변수와 일치할 수 있습니다( T = 문자 상수*, U = X).

결론: 오버로드 #2가 #1보다 더 전문적입니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.