>백엔드 개발 >C++ >C 17 템플릿 추론 가이드는 템플릿 인수 추론을 어떻게 개선합니까?

C 17 템플릿 추론 가이드는 템플릿 인수 추론을 어떻게 개선합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-10 22:45:12383검색

How Do C  17 Template Deduction Guides Improve Template Argument Deduction?

템플릿 추론 가이드: 종합적인 설명

소개

C 17에서는 '템플릿 추론 가이드, "는 생성자의 템플릿 인수 추론을 향상시키는 데 중추적인 역할을 합니다. 이 기능은 템플릿으로 개체를 구성할 때 적절한 템플릿 매개변수를 추론하는 문제를 해결합니다.

템플릿 추론 가이드란 무엇인가요?

템플릿 추론 가이드는 템플릿과 관련된 패턴입니다. 수업. 이는 생성자에 전달된 인수를 해당 템플릿 매개변수로 변환하도록 컴파일러를 안내합니다. 본질적으로 이들은 생성자의 인수에 따라 인스턴스화할 템플릿 전문화를 컴파일러가 결정하도록 규칙을 설정합니다.

템플릿 추론 가이드를 사용하는 이유와 시기

템플릿 추론 가이드 생성자의 인수 유형에서 템플릿 매개변수를 직접 유추할 수 없는 경우에 필요합니다. 이러한 상황은 템플릿 인수가 단일 인수 유형에서 파생되지 않을 때 발생합니다. 예를 들어 반복자 쌍을 사용하는 std::Vector 생성자의 경우를 생각해 보세요.

template<typename Iterator>
void func(Iterator first, Iterator last)
{
  vector v(first, last);
}

이 예에서 벡터의 T 템플릿 매개 변수 유형은 Iterator 인수에서 직접 추론할 수 없습니다. 추론 가이드를 사용하여 올바른 전문화는 벡터::value_type>이어야 함을 컴파일러에 알려야 합니다.

템플릿 추론 가이드 선언

템플릿 공제 가이드는 다음을 사용하여 선언됩니다. 구문:

template class_name(constructor_args) -> template_args;
  • class_name: 가이드가 선언되는 템플릿 클래스의 이름.
  • constructor_args: 가이드와 일치하는 생성자에 전달되는 인수.
  • template_args: 해당 템플릿 매개변수는 추론되었습니다.

std::Vector의 추론 가이드의 예를 고려하세요.

template<typename Iterator> vector(Iterator b, Iterator e) -> 
    vector<typename std::iterator_traits<Iterator>::value_type>;

이 가이드는 컴파일러에게 다음을 지시합니다. (반복자 쌍) 생성자 패턴을 사용하여 std::벡터를 생성할 때 템플릿 인수 T는 다음과 같아야 합니다. 유형 이름 std::iterator_traits::value_type으로 추론됩니다.

집계 초기화 및 템플릿 추론 가이드

흥미롭게도 템플릿 추론 가이드는 집계 및 템플릿 추론 가이드와 함께 사용할 수도 있습니다. 집계 초기화:

template<typename T>
struct Thingy
{
  T t;
};

Thingy(const char *) -> Thingy<std::string>;

Thingy thing{"A String"}; //thing.t is a `std::string`.

In 이 예에서는 집계 생성자에 전달된 문자열 리터럴의 유형을 기반으로 Thingy의 템플릿 매개변수 T를 추론하는 데 템플릿 추론 가이드가 사용됩니다.

결론

템플릿 추론 가이드는 템플릿 개체를 구성할 때 유형 추론을 활성화하는 강력한 도구입니다. 생성자 인수를 템플릿 매개변수로 변환하는 방법을 명시적으로 정의함으로써 프로그래머는 템플릿 인스턴스화 프로세스를 크게 단순화하고 코드 가독성을 향상시킬 수 있습니다.

위 내용은 C 17 템플릿 추론 가이드는 템플릿 인수 추론을 어떻게 개선합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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