클래스 템플릿에 대한 추론
클래스 템플릿에 대한 템플릿 인수 추론은 함수 템플릿과 클래스 템플릿 간의 동작을 간소화하는 것을 목표로 합니다. 그러나 제안에는 처음에 인수의 하위 집합만 명시적으로 지정되는 부분 공제가 포함되었습니다.
부분 공제 문제
Botond Ballo가 제기한 우려는 잠재적인 가능성을 강조합니다. 부분 추론이 모호한 해석으로 이어질 수 있는 경우에 혼란을 주기 위해. 예:
tuple<int> t(42, "waldo", 2.0f);
이 시나리오에서 부분 공제가 허용되면 예상되는 공제는 tuple
현재 동작
이러한 우려로 인해 클래스 템플릿에 대한 부분 공제가 제안서에서 삭제되었습니다. 현재 공제는 모든 템플릿 인수에만 적용되거나 적용되지 않을 수 있습니다.
예
다음 클래스 템플릿을 고려하세요.
template <std::size_t S, typename T> struct test { test(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; }
주어진 내용에서 코드:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!