c++

함수 템플릿

연결리스트 2020. 8. 27. 22:36
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
 
template <typename T>
 
T max(T& a, T& b) {
 
      return a > b ? a : b;
 
}
 
 
int main() {
 
      int a = 1, b = 2;
 
      std::cout << max(a, b) << std::endl;
 
      std::string s = "hello", t = "world";
 
      std::cout << max(s, t) << std::endl;
}
cs

 

위에서 정의된 템플릿 함수는 클래스 템플릿과 마찬가지로 인스턴스화 되기 전까진 컴파일 시 아무런 코드로 변환되지 않는다.

실제로 템플릿 함수가 인스턴스화 되는 부분은 max()함수가 호출되는 부분이다. 

클래스를 인스턴스화 할때와는 달리 <> 가 없어도 컴파일러가 알아서 max(a, b)를 max<int>(a, b)로 인스턴스화 해준다.

템플릿으로 발생되는 오류는 프로그램이 실행되었을 때가 아니라 컴파일할떄 발생한다. 

컴파일 시에 모든 템플릿을 실제 코드로 변환하여 실행하기 때문이다.