가변 템플릿 함수와 함께 decltype 사용
decltype을 사용하여 적절한 유형의 합계를 반환하는 가변 템플릿 함수를 작성하려고 하면 예상치 못한 문제가 발생할 수 있습니다.
문제
처음에는 후행 반환 유형 없이 함수가 선언됩니다. 그러나 여러 인수가 전달되면 컴파일러는 함수를 정의되지 않은 것으로 해석합니다. 후행 반환 유형으로 함수를 선언하면 3개 이상의 인수에 대한 문제가 해결되지만 다른 유형의 인수에 대한 반환 유형이 잘못됩니다.
문제
decltype은 다음과 같습니다. 가변 함수 템플릿은 반환 유형이 지정된 후에만 선언되므로 두 개 이상의 인수에 대해 t sum(p...) 유형을 추론할 수 없습니다.
해결 방법
decltype에서 이러한 재귀 호출을 방지하기 위해 사용자 정의 특성 클래스를 사용할 수 있습니다. sum_type 클래스는 재귀 추론 없이 여러 인수에 대한 합계 유형을 결정합니다.
업데이트된 코드
프로그램의 decltype을 유형 이름 sum_type
#include <iostream> #include <type_traits> using namespace std; template<class T> typename std::add_rvalue_reference<T>::type val(); template<class T> struct id{typedef T type;}; template<class T, class... P> struct sum_type; template<class T> struct sum_type<T> : id<T> {}; template<class T, class U, class... P> struct sum_type<T,U,P...> : sum_type< decltype( val<const T&>() + val<const U&>() ), P... > {};
이 메서드는 decltype(a (bc)) 대신 decltype((a b) c)를 반환합니다. decltype(a (b c))의 보다 정확한 결과를 얻으려면 마지막 특수화를 다음과 같이 수정하십시오.
template<class T, class U, class... P> struct sum_type<T,U,P...> : id<decltype( val<T>() + val<typename sum_type<U,P...>::type>() )>{};
위 내용은 인수 합계를 위해 Variadic 템플릿 함수와 함께 'decltype'을 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!