#include <iostream>
using namespace std;
// 1. 함수template
// (1) instantiation : T -> 특정 type으로 변경되는 과정.
// (2) template 의원리: Code Generation ->
// 단점: Code Bloat(코드가커질수있다.),2번 컴파일 한다.
// (3) template 은 2번문법을 확인하게 된다.
// (4) internal linkage를가진다.(완전한 구현체를 가져야 한다.),다른파일에 정의하면 에러
// 클래스template를 만들때에서 선언과 구현 모두 헤더에 넣어야 한다.
// (5) 함수template 도 overloading 된다.
template <typename T> T Max( T a, T b ) // 1
{
return a < b ? b : a;
}
int Max( int a, int b ) // 2
{
return a < b ? b : a;
}
void main()
{
cout << Max( 1, 2 ) << endl; // 2
cout << Max( 3.4, 3.2 ) << endl; // 1
// 2. 6.0은에러.int버전이없다면T가ambigous 하다는에러.
cout << Max( 65, 'B' ) << endl;
}
Tag | C++