>  기사  >  백엔드 개발  >  C에서 가변 템플릿 인수에 대한 함수를 어떻게 호출합니까?

C에서 가변 템플릿 인수에 대한 함수를 어떻게 호출합니까?

DDD
DDD원래의
2024-11-10 22:02:03123검색

How do you call a function on a variadic template arguments in C  ?

가변 템플릿 인수에 대한 함수 호출

C에서는 임의의 개수에 대해 원활하게 작동할 수 있는 함수를 설계하고 싶을 수도 있습니다. 다양한 유형의 주장. 재귀적 템플릿 전문화는 이러한 기능을 허용하지만 상당한 양의 중복 코드를 생성합니다. 이 문제를 해결하기 위해 보다 효율적인 접근 방식이 모색됩니다.

C 17 접기 표현식 솔루션

C 17에서는 접기 표현식을 통해 간단한 솔루션이 제공됩니다.

(f(args), ...);

이 표현식은 args 가변 팩의 각 인수에 대한 f의 순차적 호출을 용이하게 합니다. 그러나 f가 오버로드된 쉼표 연산자를 사용하여 객체를 반환하는 경우 다음 구문을 사용해야 합니다.

((void)f(args), ...);

C 17 이전 솔루션

C 17 이전 , 의도적으로 무효가 아닌 반환을 사용하여 목록 초기화 프로그램을 사용하는 일반적인 접근 방식입니다. 유형:

{ print(Args)... }

그러나 이를 위해서는 인쇄의 void 반환 유형으로 인한 컴파일 오류를 방지하기 위해 사용되지 않는 변수에 표현식을 래핑해야 합니다.

using expand_type = int[];
expand_type{ (print(Args), 0)... };

이것의 재사용성을 높이려면 패턴을 사용하면 매크로를 정의할 수 있습니다.

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }

SO_EXPAND_SIDE_EFFECTS(print(Args));

대규모 배열의 잠재적 할당을 완화하기 위해 사용자 정의 구조체를 다음과 같이 정의할 수 있습니다. 활용:

namespace so {
    struct expand_type {
        template <typename... T>
        expand_type(T&amp;&amp;...) {}
    };
}

위 내용은 C에서 가변 템플릿 인수에 대한 함수를 어떻게 호출합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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