템플릿 기초 - 함수 템플릿

 

템플릿 : 함수나 클래스를 찍어내는 틀이라고 생각하면 된다.

1) 함수 템플릿

2) 클래스 템플릿

 

두 종류가 존재한다.

이 글에서는 함수 템플릿에 대해 알아보겠다.

 

 

1-1 함수 템플릿

코딩을 하다 보면 이미지 1-1과 같이 아주 비슷한 동작을 하는 함수를 오버 로딩해서 사용할 때가 있다.

하지만 코드 양이 많아지다 보면 매번 번거롭게 오버 로딩을 하기가 힘들 수 있다. 이런 때 사용하는 것이

함수 템플릿이다.

 

 

2-1
2-2 결과

2-1 이미지를 보면 템플릿을 사용하겠다고 선언하고 해당 타입 네임을 'T'로 정해두었다.

그리고 기존에 있던 함수 모양을 그대로 가지고 오고 타입 부분에 타입 네임 T를 넣어두면 된다.

결과창을 보면 정상적으로 동작하는 것을 확인할 수 있다. 

그렇다면 따로 타입별로 함수를 선언하지도 않았는데 어떻게 알고 각자의 타입에 따라서 실행되는 것일까?

따로 사용자가 명시적으로 선언하지 않으면 컴파일러가 자동으로 해당 매개 값 타입에 따라서 실행하게 된다.

이것을 컴파일러가 타입을 추론한다고 표현한다.

참고로 'typename'부분을 'class'라고 명시해도 동일하게 동작한다. 즉 typename을 사용하거나 class를 사용하거나

둘 다 같은 기능을 하니 상황에 따라 사용자에 따라 맞춰서 사용하면 된다.

 

 

3-1

사용자가 명시적으로 타입을 지정해줄 수 있다. 13번 라인에 int로 선언해주었기 때문에

매개 값으로 실수가 오더라도 int 타입으로 실행된다.

 

 

4-1
4-2 결과

이번에는 void가 아닌 매개 값 두 개를 받아서 하나의 값을 출력하는 형태이다. 

지금까지는 하나의 인자 타입만을 받아왔는데 서로 다른 인자 타입을 동시에 받아주는 것도 가능할까?

 

 

5-1
5-2 결과

typename을 두 개 사용하여 서로 다른 인자 타입을 받아줄 수 있다.

 


템플릿 특수화

 

템플릿 특수화는 일반적인 규칙(이미지 2-1의 4~9번 라인) 이외에 특정 타입에 대해서만

다른 규칙을 적용하고 싶을 때 사용한다.

 

 

6-1
6-2
6-3 결과

Knight 클래스 타입에 대해서만 다른 규칙을 적용한다.

'프로그래밍 언어 공부 > C++' 카테고리의 다른 글

STL - vector  (0) 2022.07.05
템플릿 기초 - 클래스 템플릿  (0) 2022.07.05
함수 객체  (0) 2022.07.03
함수 포인터 / typedef  (0) 2022.07.03
디버깅 연습문제  (0) 2022.07.02

+ Recent posts