[Modern C++] 9.2. 파라미터 팩

윤정민·2023년 7월 7일
0

C++

목록 보기
23/46

1. 템플릿 파라미터 팩

template <typename T, typename... Types>처럼 0개 이상의 템플릿 인자를 나타내는 것

  • 예제 코드

    두 print 함수의 위치를 바꿔쓴다면 컴파일 오류가 발생한다. 이는 컴파일 시에, 자신의 앞에 정의된 함수들 밖에 보지 못하기 때문이다.

#include <iostream>

template <typename T>
void print(T arg) {
  std::cout << arg << std::endl;
}

template <typename T, typename... Types> //템플릿 파라미터 팩
void print(T arg, Types... args) {// 함수 파라미터 팩
  std::cout << arg << ", ";
  print(args...);
}

int main() {
  print(1, 3.1, "abc");
  print(1, 2, 3, 4, 5, 6, 7);
}

1.1. sizeof...

전체 인자의 개수를 리턴

1.2. Fold Expression

가변 길이 템플릿은 매우 편하지만 재귀 함수 형태이기 때문에 호출 종료 조건의 함수를 따로 만들어 줘야 한다. 이는 코드의 복잡도를 쓸데없이 늘리게 된다.

  • C++ 17에서 도입된 Fold 형식
#include <iostream>

template <typename... Ints>
int sum_all(Ints... nums) {
  return (... + nums);
}

int main() {
  // 1 + 4 + 2 + 3 + 10
  std::cout << sum_all(1, 4, 2, 3, 10) << std::endl;
}
  • 위 코드는 return ((((1 + 4) + 2) + 3) + 10);이렇게 해석됨
    • 이는 단항 좌측 Fold라 부름
  • 주의할 점: Fold 식을 쓸 때 꼭 ()로 감싸주자
return (... + nums);
profile
그냥 하자

0개의 댓글