>백엔드 개발 >C++ >인수의 합을 계산하기 위해 Variadic 템플릿 함수와 함께 `decltype`을 사용하는 방법은 무엇입니까?

인수의 합을 계산하기 위해 Variadic 템플릿 함수와 함께 `decltype`을 사용하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-11 03:22:02931검색

How to Use `decltype` with a Variadic Template Function to Calculate the Sum of its Arguments?

가변 템플릿 함수와 함께 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&amp;>() + val<const U&amp;>() ), P... > {};

이렇게 하면 원래 프로그램의 decltype을 유형 이름 sum_type::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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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