가변 템플릿 함수와 함께 decltype을 사용하는 후행 반환 유형
가변 템플릿 함수를 사용하여 인수의 합을 누적하는 함수를 만들려고 할 때 템플릿 및 후행 반환 유형 구문을 사용하면 문제가 발생합니다. 특히, 인수가 세 개 이상인 함수의 경우 컴파일러에서 오류가 발생할 수 있습니다. 이는 가변 함수 템플릿이 반환 유형을 지정한 후에만 선언된 것으로 간주되어 decltype의 합계가 가변 함수 템플릿 자체를 참조할 수 없는 상황이 발생하기 때문입니다.
잠재적인 해결 방법은 사용자 정의 특성 클래스를 사용하여 다음을 수행하는 것입니다. decltype 표현식 내에서 재귀 호출을 피하세요:
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을 유형 이름 sum_type
합산이 연산 순서(예: a (b c))를 준수하도록 하기 위해 sum_type의 최종 특수화를 다음과 같이 수정할 수 있습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!