템플릿에서 typename키워드와 class키워드의 차이
조회수 10693회
template < typename T >
template < class T >
템플릿을 정의할 때 둘 다 많이 봤는데 이 둘의 차이는 뭔가요?
그리고, 또 다른 질문은 위키피디아에서 이런 템플릿을 봤는데 여기서 각 키워드는 무슨 의미로 쓰는 건가요?
template < template < typename, typename > class Container, typename Type >
class Example
{
Container< Type, std::allocator < Type > > baz;
};
1 답변
-
보통은
typename
와class
중 어느 걸 써도 상관없습니다.template<class T> class Foo{}; ///두 개가 같음 template<typename T> class Foo{};
둘을 혼용할 수 없는 특수한 경우는
1. dependent type의 경우 -
typename
만다른 template 파라미터와 관련된 타입을 쓰는 경우,
typename
키워드만 쓸 수 있습니다.template<typename param_t> class Foo { typedef typename param_t::baz sub_t; };
2.
template template
을 설정하는 경우 -class
만두 번째 질문이 여기에 해당합니다.
template template
은 꼭 다음과 같이class
키워드를 써야 하고, 이 때는typename
과 혼용할 수 없습니다template < template < typename, typename > class Container, typename Type >
또한, template을 인스턴스화할때는 다음과 같이
class
만 쓸 수 있습니다.template class Foo<int>;
댓글 입력