본문 바로가기
::public/C++

(c++17) 가변 길이 템플릿(variadic template)...

by 해맑은욱 2025. 1. 24.
함수나 클래스 템플릿이 n 개수의 템플릿 파라미터를 받을 수 있도록 해주는 기능
C++11에서 추가된 기능으로, “...”(ellipsis) 문법을 사용

"templete<typename... Args>"  이 부분이 가변 길이 템플릿

"Args... args" 이 부분이 파라미터 팩

 

 

Fold 형식 (Fold expression)

C++17에서 추가된 기능으로, 파라미터 팩에 대해 산술, 논리 연산 등을 순차적으로 적용할 때 간결하게 표현하는 방법.
“인자들을 하나씩 꺼내서, 어떤 연산을 적용해 전부 하나의 결과로 합치는” 식

"(args + ...)" 이 부분이 Fold 형식

내부적으로 ((1 + 2) + 3) + 4와 같이 전개됨.

 

초기값이 있는 Fold

내부적으로 (initial + ... + args)는 ((10 + 1) + 2) + 3처럼 전개됨.

 

*이전 C++ 표준(C++11, C++14) 시절에는 가변 길이 템플릿으로 여러 인자를 처리하려면 템플릿 재귀 구문이 필요했었음.

C++17에서는 Fold expression을 사용하면, 이런 재귀 방식 없이 한 줄로 가변 인자들을 모두 처리할 수 있음.

단, 산술 연산으로 합계를 구하는 경우 (args + ...)를 쓰면 0개 인자일 때는 식이 비어지는 문제가 있을 수 있어, 초깃값(init) 을 두는 방식을 흔히 사용함.

'::public > C++' 카테고리의 다른 글

explicit  (0) 2023.07.06
const 위치에 따른 의미  (0) 2023.07.05
*개념을 항상 생각하고 정리하자!  (0) 2023.06.22
(c++11) lambda  (0) 2023.02.08
(C++11) std::move  (0) 2023.01.31