함수를 사용하는데 여러가지의 타입을 사용하고 싶다면 템플릿을 사용한다.

//class
template <typename T>
class Example
{
	T* data;
	...
	
}

//main
Example<int> intExample;
Example<float> floatExample;

템플릿은 클래스 뿐만 아니라 함수에도 사용할 수 있다.

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

하지만 함수에 쓰이는 템플릿은 굳이 타입을 설정해 주지 않아도 된다!

//일반적인 구조라면
max<int>(a, b)
//라고 사용할 것이다.

//하지만 컴파일러는 똑똑하다.
int a, b;
...
max(a, b)
//이렇게 사용하면 max<int>(a, b)와 동일하다.

std::string s1, s2;
max(s1, s2)
//이 또한 max<std::string>(s1, s2) 와 동일한 것이다.