[SSM 안드로이드 프레임워크 개발 강의 ] 3. 메크로와 템플릿?!
#include<iostream>
using namespace std;
//주제 3 . 함수 템플릿
//1. 메크로를 사용한 코드 생성 - 전처리기가 코드 생성을 한다.
// 전처리기는 사용자가 사용하는 타입을 모른다. 그래서 사용전에는 꼭 MAKE_MAX(필요한 타입)으로 선언해야 한다.
// 2 컴파일러를 사용한 코드 생성 - template
/*
int Max(int a, int b){
return a < b ? b : a;
}
double Max(double a, double b){
return a < b ? b : a;
}
*/
//동일한 코드가 반복된다면 코드 생성기를 사용하자.
//#define MAKE_MAX(T) T MAX(T a, T b){return a< b ? b:a;}
//MAKE_MAX(int)
//MAKE_MAX(double)
// 함수 템플릿? 템플릿 함수? 함수 템플릿으로 쓰자!
// 2 컴파일러를 사용한 코드 생성 - template
// 인스턴스화 : 템플릿이 타입이 결정되어서 진짜 함수 /클래스를 만드는 과정.
// 암시적 인스턴스화 : T를 컴파일러가 결정
// 명시적 인스턴스화 : T를 사용자가 결정!
template<typename T> T Max(T a, T b){return a< b ? b: a;}
int main(){
Max(1,2); //int Max(int, int ) 를 생성하는 효과를 가져온다
Max(1.1, 2.2); // double Max(double, double) 를 생성하는 효과를 가져온다.
// Max(65,'B'); //error!
Max<int>(65,'B'); // ok 사용자가 직접 T의 타입을 지정
}