템플릿에서 typename키워드와 class키워드의 차이


  1. template < typename T >
  2. template < class T >

템플릿을 정의할 때 둘 다 많이 봤는데 이 둘의 차이는 뭔가요?

그리고, 또 다른 질문은 위키피디아에서 이런 템플릿을 봤는데 여기서 각 키워드는 무슨 의미로 쓰는 건가요?

template < template < typename, typename > class Container, typename Type >
class Example
{
     Container< Type, std::allocator < Type > > baz;
};
  • 2016년 01월 21일에 작성됨

조회수 554


1 답변


좋아요
0
싫어요
채택취소하기

보통은 typenameclass 중 어느 걸 써도 상관없습니다.

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>;


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close