>  기사  >  백엔드 개발  >  클래스 템플릿에 대한 템플릿 인수를 부분적으로 추론할 수 없는 이유는 무엇입니까?

클래스 템플릿에 대한 템플릿 인수를 부분적으로 추론할 수 없는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-08 21:13:02257검색

Why Can't We Partially Deduce Template Arguments for Class Templates?

클래스 템플릿에 대한 부분 템플릿 인수 추론: 재검토

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 그 자체로 유효한 유형입니다.

tuple<int> t(42, "waldo", 2.0f);

이러한 모호성을 방지하려면 클래스 템플릿에 대해 전체 템플릿 인수 세트를 제공해야 하며, 부분 추론은 함수 템플릿에 대한 옵션으로 남아 있습니다.

위 내용은 클래스 템플릿에 대한 템플릿 인수를 부분적으로 추론할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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