java generic과 비슷
자료형을 중복으로 작성하지 않아도 됨
컴파일시 타입을 해석해서 작성해준다.
template <typename T>
T Add(T a, T b)
{
return a + b;
}
Add<int>(3, 10);
Add<float>(3.14f, 10.99f);
typename vs class
차이는 사실상 없다.
가독성을 위해 그냥 typename 쓰자
template의 구현체는 h에 적는다.
컴파일 시에 template를 해석되기 때문.
사이즈(size_t N)로 고정된 Vector를 만들어 사용할 수 있다.
template <typename T, size_t N>
class FixedVector
{
public:
//
private:
//
}
특정한 타입에 대해선 예외적으로 처리하도록 특수화
template <class T, class Allocator>
class std::vector<T, Allocator> {}
template <class Allocator> // bool을 위한 특수화
class std::vector<bool, Allocator> {}