2012-07-11 2 views
1

클래스를 템플릿으로 변환하려고하는데이 클래스는 typename T의 일부 데이터에 액세스해야합니다.이 경우 typename T는 객체 또는 객체에 대한 포인터가 될 수 있습니다. 포인터 또는 객체를 다루는 경우 템플릿 내에서 어떻게 말합니까?클래스를 템플릿으로 변환

부스트를 사용할 수 없습니다.

답변

2

템플릿 특수화를 사용합니다. 먼저 템플릿 매개 변수를 일반 형식으로 처리하는 템플릿을 만듭니다.

template <typename T> 
struct Foo { 
    T t_; 
    Foo() { std::cout << "regular version" << std::endl; } 
}; 

그런 다음 유형에 대한 포인터 인 경우 템플릿을 특수화합니다.

template <typename T> 
struct Foo<T *> { 
    T *t_; 
    Foo() { std::cout << "pointer version" << std::endl; } 
}; 

Foo<int> a; 
Foo<int *> b; 
+0

흥미로운 점은 일반적으로 동일한 헤더 파일로 이동합니까, 아니면 별개입니까? – Xavier

+0

@Xavier : 대개 같은 헤더 파일에서 볼 수 있습니다. 분리 된 경우 특수 파일에 대해 헤더 파일을 포함해야합니다. – jxh

+0

고마워요! – Xavier

관련 문제