본문 바로가기
개발 언어/cpp

CPP template

by eeeun:) 2022. 3. 18.
반응형

c언어에서 min이라는 함수를 만들 때, 아래 코드와 같이 파라미터로 int를 받는 함수, double를 받는 함수를 각기 만들어 줘야 되는 불편함이 있었다.

int min(int a, int b) {
	return a > b ? b : a;
}

double min(double a, double b) {
	return a > b ? b : a;
}

 

 

cpp에서는 template을 통해 여러 가지 data type를 유동적으로 받을 수 있는 함수를 만들 수 있다!!!

위의 예제 코드와 같이 데이터 형 별로 함수를 따로 만들어줘야 됐는데 template를 사용하면 밑의 코드와 같이 하나만 만들어도 모든 데이터 타입에서 사용할 수 있다!!

template <typename T>
T min(T a, T b) {
	return a > b ? b : a;
}

 

template 함수의 정의는 헤더에 꼭 적어줘야 된다!

왜냐하면 template이 함수를 생성하는 조건이 type(템플릿 파라미터)의 크기와 함수의 정의를 알아야 함수를 생성하기 때문이다.

(컴파일할 때는 cpp 파일 단위로 컴파일이 되고 그다음 과정이 링킹이기 때문에, 만약 cpp 파일에서 적어놓으면 각각의 cpp 파일 모두에 템플릿 함수를 적지 않는 이상 문제가 된다)

 

예를 들어 cpp01에 템플릿 함수의 정의가 있고, cpp02에서 템플릿 함수를 사용한다고 하면 템플릿 함수의 크기는 cpp02에서 결정되고 템플릿 함수의 정의는 cpp01에서 결정된다. cpp 파일은 각각 컴파일이 되기 때문에 템플릿 함수의 생성 조건이 성립되지 못해 컴파일 오류가 나게 된다.

728x90

댓글