>백엔드 개발 >C++ >수업 템플릿에서 부분 공제가 제거된 이유는 무엇입니까?

수업 템플릿에서 부분 공제가 제거된 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-11 13:55:031028검색

Why Was Partial Deduction Removed from Class Templates?

클래스 템플릿에 대한 추론

클래스 템플릿에 대한 템플릿 인수 추론은 함수 템플릿과 클래스 템플릿 간의 동작을 간소화하는 것을 목표로 합니다. 그러나 제안에는 처음에 인수의 하위 집합만 명시적으로 지정되는 부분 공제가 포함되었습니다.

부분 공제 문제

Botond Ballo가 제기한 우려는 잠재적인 가능성을 강조합니다. 부분 추론이 모호한 해석으로 이어질 수 있는 경우에 혼란을 주기 위해. 예:

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

이 시나리오에서 부분 공제가 허용되면 예상되는 공제는 tuple입니다. 그러나 Tuple 또한 유효한 유형이므로 모호성이 발생합니다.

현재 동작

이러한 우려로 인해 클래스 템플릿에 대한 부분 공제가 제안서에서 삭제되었습니다. 현재 공제는 모든 템플릿 인수에만 적용되거나 적용되지 않을 수 있습니다.

다음 클래스 템플릿을 고려하세요.

template <std::size_t S, typename T>
struct test
{
    test(T (&amp;input)[size]) : data(input) {}
    type_t (&amp;data)[size]{};
};

그리고 그 도우미 기능:

template <std::size_t S, typename T>
test<S, T> helper(T (&amp;input)[S]) { return input; }

주어진 내용에서 코드:

int buffer[5];

auto a = helper<5, int>(buffer); // No deduction
auto b = helper<5>(buffer);      // Type deduced
auto c = helper(buffer);         // Type and size deduced

다음 유형만 추론하려고 할 때 발생하는 오류에서 알 수 있듯이 전체 공제만 허용됩니다.

auto b = helper<5>(buffer);      // Type deduced: FAILS.

위 내용은 수업 템플릿에서 부분 공제가 제거된 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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