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

조회수 10693회
  1. template < typename T >
  2. template < class T >

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

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

template < template < typename, typename > class Container, typename Type >
class Example
{
     Container< Type, std::allocator < Type > > baz;
};

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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)