함수나 클래스 템플릿이 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 |