가변 템플릿 인수에 대한 함수 호출
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&&...) {} }; }
위 내용은 C에서 가변 템플릿 인수에 대한 함수를 어떻게 호출합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!