목표는 tuple의 모든 요소를 출력

시도 1: 반복문

get<?>에 컴파일 타임 상수만 가능 → 실패

시도 2: fold expression

→ 식 상수가 안 돼서 실패

결론

compile time constant pack 필요integer_sequence 사용

integer_sequence

  • 컴파일 타임 상수들의 모임
  • fold expression에서 사용 가능
  • std::index_sequence<0, 1, 2> 형태
  • std::make_index_sequence<N>로 생성
  template<typename Tuple, std::size_t ... idx>
void print_tuple_impl(Tuple& tp, std::index_sequence<idx...>) {
    (std::print("{} ", get<idx>(tp)), ...);
}

template<typename Tuple>
void print_tuple(Tuple& tp) {
    print_tuple_impl(tp, std::make_index_sequence<tuple_size_v<Tuple>>{});
}
  

index_sequence를 넘겨서 각 index마다 get<idx> 호출

참고

  • tuple_size_v<Tuple>: tuple 타입의 요소 개수
  • get<idx>: N번째 요소 가져오는 함수 (앞서 구현)