클래스 템플릿에 대한 부분 템플릿 인수 추론: 재검토
P0091에서 함수와 클래스 템플릿 동작을 통합하려는 노력에도 불구하고 클래스 템플릿의 부분 인수 추론은 여전히 파악하기 어렵습니다. 이 토론에서는 현재의 제한 사항을 명확히 하고 그 뒤에 숨은 잠재적인 이유를 살펴봅니다.
클래스 템플릿 테스트와 해당 도우미 기능 도우미를 고려해 보세요. 제공된 코드에서 알 수 있듯이 도우미는 부분 추론을 허용하지만 해당 클래스 템플릿 테스트는 그렇지 않습니다.
template<std::size_t S, typename T> struct test { static constexpr auto size = S; using type_t = T; test(type_t(&&input)[size]) : data(input) {} type_t(&&data)[size]{}; };
template<std::size_t S, typename T> test<S, T> helper(T(&&input)[S]) { return input; }
실험해 보면 클래스 템플릿 추론은 모든 인수가 명시적으로 지정된 경우에만 발생한다는 것이 분명해졌습니다. 제공됩니다. 이러한 예상되는 행위와의 일탈은 P0091의 해석에 착오가 있었던 것은 아닌지 의문을 제기한다.
Botond Ballo의 여행 보고서에서 알 수 있듯이 수업 템플릿에 대한 부분 차감이 제안되었다가 혼란 우려로 인해 나중에 철회되었다. . 예를 들어, 다음 코드는 tuple
tuple<int> t(42, "waldo", 2.0f);
이러한 모호성을 방지하려면 클래스 템플릿에 대해 전체 템플릿 인수 세트를 제공해야 하며, 부분 추론은 함수 템플릿에 대한 옵션으로 남아 있습니다.
위 내용은 클래스 템플릿에 대한 템플릿 인수를 부분적으로 추론할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!