다음의 클래스 템플릿 정의를 보자. 이 정의에서 독특한 사실은 템플릿 매개변수의 선언에 마치 함수처럼 변수의 선언이 등장했다는 점이다.
template <typename T, int len>
class SimpleArray
{
private:
T arr[len];
public:
T& oeprator[] (int idx)
{
return arr[idx];
}
}
이렇듯 템플릿 배개변수에도 변수가 올 수 있다. 그리고 이를 기반으로 다음의 형태로 객체생성이 가능하다.
SImpleArray<int, 5> i5arr;
SImpleArray<double, 7> d7arr;
위의 두분장에서 템플리 매개변수 len에 전달된 인자 5와 7은 해당 템플릿 클래스에서 상수처럼사용된다.
물론 위의 두 템플릿 클래스 SimpleArray<int, 5> 와 SimpleArray<doube, 7> 은 서로 다른 자료형의 클래스로 구분된다.
“굳이?”
생성자를 이용해도 충분히 구현 가능하다. 그렇다면 이러한 C++의 문법에 어떠한 의미를 부여할 수 있을까?
i5arr2=i5arr1; //같은 class형이기 때문에 대입연산이 가능하다. arr len 이 5 고정
그리고 이 예제를 통해서 주목할 사실은 다음과 같다.
“SimpleArray<int, 5>와 SimpleArray<int, 7>은 서로 다른 형(type)이다.”
template <typename T=int, int len = 7>
int main(void)
{
SimpleArray<> arr;
}
위 예제에서 보이듯이 템플릿 배개변수에 디폴트 값이 지정되어도, 템플릿 클래스의 객체생성을 의미하는 <> 기호는 반드시 추가되어야 한다.