본문 바로가기

C++

C++ 배우기 21(템플릿)

템플릿(template)

함수나 클래스를 여러 번 다시 작성하지 않도록, 어떤 자료형이던 받아서 사용할 수 있도록 만들어 놓은 틀이다.

오버로딩되서 사용되는 함수를 템플릿화 시켜서 사용할 수도 있다.

template<typename T> //템플릿 사용법
static void Shuffle(T* deck)
{
	.
	.
	.
}

template의 typename을 T로 하겠다는 뜻이며, typename은 본인이 원하는 typename으로 바꿔서 사용할 수 있다.

그리고 위의 예시로 Shuffle() 함수를 템플릿화 시킬 건데, 여기서 중요한 건 매개변수이다.

매개변수의 자료형이 T인 것을 볼 수 있다. 이렇게 템플릿의 typename T로 자료형을 해두면,

Shuffle() 함수를 호출할 때 받아오는 어떠한 값의 자료형이던 알아서 치환돼서 실행이 된다.

 

이런 템플릿은 클래스를 따로 만들어 그 안에서 쓴다고 한다. 그래서 보통 Utility 클래스를 만들어서 그 안에서 만든다.

하지만 템플릿은 선언과 정의을 헤더 파일(.h)와 소스 파일(.cpp)로 나눠서 할 수 없다.

그렇게 되면 Shuffle() 함수는 여러 번 컴파일이 되어서 정의가 중복되는데, 이를 막고자 함수의 반환형 앞에 static을

붙혀서 쓴다.