가변 길이 템플릿

박성빈·2024년 6월 15일
0

Cpp

목록 보기
1/5

가변 길이 템플릿

가변 길이 템플릿은 템플릿 인자의 수를 가변적으로 받아야 할 때 사용할 수 있는 템플릿이다.

간단하게 여러 인자를 받아서 출력하는 프로그램을 가변 길이 템플릿을 활용해서 구현해본다.

바로 코드를 보자

#include <iostream>
#include <string>

//재귀적인 함수의 베이스 케이스를 나타내는 함수
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(23, 1.4, "hello");
    return 0;
}

	

위의 두 템플릿 함수 print로 가변인자 템플릿을 만들 수 있다.
print(23, 1.4, "hello")를 호출할 때 무슨 일이 일어나는지 알아보자.

우선 두 번째 print 함수에서는 템플릿 인자로 typename... Types를 받고 있다.
이는 템플릿 파라미터 팩이라고 하며 이것은 0개 이상의 템플릿 인자를 나타낸다.
그리고 함수 파라미터에도 Types...이라는 타입의 args 매개변수가 존재하는데 이것은 함수 파라미터 팩이라고 하며
템플릿 파라미터 팩과 마찬가지고 0개 이상의 매개변수를 나타낸다.

즉 print(23, 1.4, "hello")를 호출하면 컴파일러는 매개 변수를 보고 두 번째 함수를 선택한다.
그렇게 되면 두 번째 함수에서의 print에서 맨 앞에 인자 23은 arg에 들어가고 나머지 1.4과 "hello"는 args에 들어간다. 그러므로 arg를 출력하고 재귀적으로 나머지 args를 다시 print()함수로 호출한다.

그렇게 쭉 가다가 마지막으로 "abc"하나만 두 번째 print에서 재귀적으로 호출되면 그 때는 컴파일러가 첫 번째 print함수를 선택해서
"abc"를 출력하고 끝낸다.
C++에서는 파라미터 팩이 없는 함수를 우선적으로 선택한다는 규칙 때문이다.

이렇게 하면 원하는 만큼 인자를 넣어서 출력을 할 수 있게 된다.

profile
게임 서버 프로그래밍을 공부하고 있습니다.

0개의 댓글