[C++/Syntax] Template (in Class)

클래스에서의 탬플릿

템플릿은 함수뿐만아니라 클레스에서도 사용이가능하다.
대부분의 경우 선언, 작동방식, 특수화의 경우는 함수와 유사하다.

동일한 부분에 대해선 짧게 넘어가고, 클래스와 템플릿에 대해서 설명하지 못한 부분에대해서 추가적으로 이야기해본다.


Syntax

template <typename T>
class TEST{
private:
    T num;
public:
    TEST(T x=0);
    void show();

함수와 사용방법은 동일하다. template을 선언하고 <typename T>를 기준으로 T로 설정하고 싶은 변수들에게 T를 부여하면된다(..?)

당연하겠지만 TEST를 변수로 갖는 TESTER 클래스가 있다면, T에 TEST 클래스가 들어갈 수 있게된다. TESTER<TEST<int>>() 와 같은 형식으로..

또한 함수처럼 클래스를 다음과 같이 정의하여 특수화를 할 수 있다.
template<>
class TEST<int> { ... }

이렇게 정의한다면, TEST<int>에 대해선 일반 템플릿을 사용하지 않고 사용자가 선언한 클래스에서 불러오게된다.

++ 부분특수화가 가능하다.
template <class T1>
class TEST<T1, int> {...}
위와같은 방식으로 하게되면 < ? , int>인 템플릿 클래스는 모두 위 클래스를 불러온다.

템플릿에게도 인자를 부여할 수 있는데 이를 템플릿 메개변수라고 한다.
template <class T, int len>
class TEST {...}

이를 호출할땐 TEST<int, 5> test; 와 같이 정의 할 수 있다.

또한 템플릿 매개변수는 디폴트 값 설정도 가능하다.
template <class T, int len=10>
class TEST {...}

호출할때 따로 len값을 전달하지 않으면 10이 기본적으로 들어가게된다.

 

템플릿과 static 변수

static은 같은 템플릿 함수 내부에서 값을 공유 하는데, 이는 템플릿의 type에 따라 각각 작동한다.
예를들어, TEST<int>()에서의 static값을 TEST<long>()에서의 static값에 영향을 주지 못한다.

클래스 또한 유사한 방식으로 작동한다.
템플릿 클래스 별로 static 변수를 공유하게된다.
즉, class<int>와 class<int> 의 static변수는 서로 공유되지만, class<int>와 class<long>의 static변수는 다르게 작동한다.

 

카테고리C++

글의 문제가 있다면 댓글을 달아 주세요.

This site uses Akismet to reduce spam. Learn how your comment data is processed.