2014-01-10 3 views
7
template<typename... TArgs> struct List { }; 
template<template<typename...> class> struct ListHelper; 
template<typename T, typename... TArgs> struct ListHelper<List<T, TArgs...>> { }; 
                 ^
    /*Error: Template argument for template template parameter 
      must be a class template or type alias template*/ 

무엇이 잘못 되었습니까? clang ++ SVN을 사용하고 있습니다."템플릿 템플릿 매개 변수의 템플릿 인수는 클래스 템플릿 또는 별칭 템플릿이어야합니다."

+0

가 필요할 것입니다

template<typename T, typename... TArgs> struct ListHelper<List> { }; // only the template itself ^^^^ 

당신이 List<T,TArgs...>을 통과하려면, 무엇 오류를 보여줍니다, 또는 템플릿에 이미 포함하여 실패하는 템플릿 인스턴스화? –

+0

@ πάνταῥε instant 인스턴스화가 없습니다. 이것은 문자 그대로 프로그램의 모든 코드입니다 ('int main() {return 0;}'제외) –

+4

나는이 오류 메시지를 좋아합니다 : 3 단어 중 1 단어는 "템플릿"입니다. – Casey

답변

11

템플릿 템플릿 매개 변수가 있습니다. 템플릿을 인수로 전달해야합니다. 대신에 템플릿 인스턴스화를 인수로 전달합니다. 이는 템플릿이 아닌 구체적인 클래스입니다 (모든 매개 변수가 바인딩됩니다).

고려 :

template <template<typename> typename X> 
class WantsTemplate {}; 

template <typename> 
class ATemplate {}; 

WantsTemplate<ATemplate> wt1; // OK 
WantsTemplate<ATemplate<int> > wt2; // not OK 
1

템플릿 템플릿 매개 변수는 템플릿이 아니라 그것의 인스턴스를 기대하고있다. 이 : 클래스, 당신은

template<typename T> struct ListHelper; 
관련 문제