가변 템플릿 인수에 대한 함수 호출
목표는 가변 개수의 인수를 가져와서 다음을 실행하는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!