> 백엔드 개발 > C++ > C에서 Variadic 템플릿 인수에 대한 함수를 호출하는 방법은 무엇입니까?

C에서 Variadic 템플릿 인수에 대한 함수를 호출하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-24 16:31:14
원래의
307명이 탐색했습니다.

How to Call Functions on Variadic Template Arguments in C  ?

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

목표는 가변 개수의 인수를 가져와서 다음을 실행하는 print() 함수를 구현하는 것입니다. 각 인수에 대한 임의 함수. 이는 각 인수 유형에 대해 별도의 특수화를 사용하여 재귀 구현에 대한 간단한 대안으로 바람직합니다.

C 17 솔루션

C 17에서는 다음을 사용하여 이를 달성할 수 있습니다. 접기 표현식:

(f(args), ...);
로그인 후 복사

이 표현식은 args의 인수를 확장하고 각각에 대해 f()를 호출합니다. f()가 오버로드된 쉼표 연산자를 사용하여 객체를 반환하는 경우 다음을 사용하세요.

((void)f(args), ...);
로그인 후 복사

C 17 이전 솔루션

C 17 이전 C 버전의 경우, 일반적인 접근 방식은 목록 초기화 프로그램을 사용하여 인수를 확장하는 것입니다.

{ print(Args)... }
로그인 후 복사

그러나 print()는 다음을 반환합니다. void이므로 컴파일 오류를 방지하려면 코드를 아래와 같이 수정할 수 있습니다.

using expand_type = int[];
expand_type{ (print(Args), 0)... };
로그인 후 복사

이는 가변 인수에 작동하지만 고려해야 할 몇 가지 주의 사항이 있습니다. 이 패턴을 재사용 가능하게 만들기 위해 매크로를 생성할 수 있습니다.

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), 0)... }
로그인 후 복사

그러나 과부하된 쉼표 연산자로 인한 잠재적인 문제를 방지하기 위해 매크로를 다음과 같이 업데이트할 수 있습니다.

#define SO_EXPAND_SIDE_EFFECTS(PATTERN) ::so::expand_type{ 0, ((PATTERN), void(), 0)... }
로그인 후 복사

사전 -C 17 솔루션은 불필요한 메모리 할당을 피하기 위해 추가 고려 사항이 필요할 수도 있습니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿