템플릿 추론 가이드 란 무엇이며 언제 사용해야합니까?
C ++ 17 표준은 "템플릿 추론 가이드"를 도입합니다. 이 표준 버전에 도입 된 생성자에 대한 새로운 템플릿 인수 추론과 관련이 있다고 생각하지만, 그것이 무엇인지, 무엇을위한 것인지에 대한 간단한 FAQ 스타일의 설명은 아직 보지 못했습니다.
C ++ 17의 템플릿 추론 가이드 란 무엇입니까?
왜 (그리고 언제) 그것들이 필요합니까?
어떻게 신고합니까?
템플릿 추론 가이드는 컴파일러에게 매개 변수 집합 (및 해당 유형)을 템플릿 인수로 변환하는 방법을 알려주는 템플릿 클래스와 관련된 패턴입니다.
가장 간단한 예는 of std::vector
및 반복자 쌍을 취하는 생성자입니다.
template<typename Iterator>
void func(Iterator first, Iterator last)
{
vector v(first, last);
}
컴파일러는 vector<T>
의 T
유형이 무엇인지 파악해야 합니다. 우리는 답이 무엇인지 압니다. T
이어야합니다 typename std::iterator_traits<Iterator>::value_type
. 그러나 입력 하지 않고 컴파일러에게 어떻게 알릴 vector<typename std::iterator_traits<Iterator>::value_type>
까요?
공제 가이드를 사용합니다.
template<typename Iterator> vector(Iterator b, Iterator e) ->
vector<typename std::iterator_traits<Iterator>::value_type>;
이는 컴파일러에게 vector
해당 패턴과 일치 하는 생성자 를 호출 할 때 vector
의 오른쪽에있는 코드를 사용하여 특수화를 추론 한다는 것을 알려줍니다 ->
.
인수에서 유형을 추론하는 것이 해당 인수 중 하나의 유형을 기반으로하지 않는 경우 가이드가 필요합니다. 에서를 초기화 vector
하면 initializer_list
명시 적으로 vector
's가 사용 T
되므로 가이드가 필요하지 않습니다.
왼쪽은 반드시 생성자를 지정하지 않습니다. 작동 방식은 유형에서 템플릿 생성자 추론을 사용하는 경우 모든 추론 가이드에 대해 전달하는 인수와 일치한다는 것입니다 (기본 템플릿의 실제 생성자는 암시 적 가이드를 제공함). 일치하는 항목이 있으면이를 사용하여 유형에 제공 할 템플릿 인수를 결정합니다.
그러나 추론이 완료되면 컴파일러가 유형에 대한 템플릿 매개 변수를 파악하면 해당 유형의 객체에 대한 초기화가 아무 일도 발생하지 않은 것처럼 진행됩니다. 즉, 선택한 추론 가이드가 선택한 생성자 와 일치하지 않아도됩니다 .
이는 또한 집계 및 집계 초기화와 함께 가이드를 사용할 수 있음을 의미합니다.
template<typename T>
struct Thingy
{
T t;
};
Thingy(const char *) -> Thingy<std::string>;
Thingy thing{"A String"}; //thing.t is a `std::string`.
따라서 추론 가이드는 초기화되는 유형을 파악하는 데만 사용됩니다. 초기화의 실제 프로세스는 결정이 이루어지면 이전과 똑같이 작동합니다.
'development' 카테고리의 다른 글
ImportError : 'encodings'라는 모듈이 없습니다. (0) | 2020.10.17 |
---|---|
const-correctness는 컴파일러에게 최적화를위한 더 많은 공간을 제공합니까? (0) | 2020.10.17 |
godaddy.com 공유 웹 호스팅에서 ASP.NET MVC 프로젝트를 실행할 수있는 방법이 있습니까? (0) | 2020.10.17 |
다중 CPU, 다중 코어 및 하이퍼 스레드 (0) | 2020.10.17 |
Maven 3의 모듈 버전으로 project.parent.version 사용에 대한 경고 (0) | 2020.10.17 |