>백엔드 개발 >C++ >부분 클래스 템플릿 인수 추론이 여전히 작동하지 않는 이유는 무엇입니까?

부분 클래스 템플릿 인수 추론이 여전히 작동하지 않는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-09 02:12:011056검색

Why is Partial Class Template Argument Deduction Still Unworkable?

부분 클래스 템플릿 인수 추론이 여전히 어려운 이유

P0091: 클래스 템플릿에 대한 템플릿 인수 추론 제안의 의도에도 불구하고 동작을 정렬합니다. 함수 및 클래스 템플릿의 경우 클래스 템플릿에 대한 부분 공제가 유지됩니다. 사용할 수 없습니다.

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

template <std::size_t S, typename T>
struct test
{
    static constexpr auto size = S;
    using type_t = T;

    test(type_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: FAILS
auto c = helper(buffer);         // Type and size deduced

성공적으로 컴파일되었습니다. 그러나 최신 컴파일러 버전에서는 부분 추론(즉, auto b = helper<5>(buffer);)이 실패하여 부분 클래스 템플릿 인수 추론이 실제로 지원되지 않음을 나타냅니다.

이러한 제한은 우려에서 비롯됩니다. 다음과 같은 경우에 발생할 수 있는 혼란에 대해 제기되었습니다.

// Deduced as tuple<int, string, float>
// but tuple<int> is also a valid type!
tuple<int> t(42, "waldo", 2.0f);

따라서 제안은 처음에 공제 동작을 통합하는 것을 목표로 했지만 클래스 템플릿에 대한 부분 공제는 여전히 남아 있습니다. 잠재적인 모호성 문제로 인해 작동하지 않습니다.

위 내용은 부분 클래스 템플릿 인수 추론이 여전히 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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