2014-01-10 275 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*/ 

出現了什麼問題?我正在使用鐺++ SVN。「模板模板參數的模板參數必須是類模板或類型別名模板」

+0

什麼是模板實例,顯示錯誤,還是模板已被列入失敗? –

+0

@πάνταῥεῖ沒有實例化。這實際上是程序中的所有代碼(除了'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, typename... TArgs> struct ListHelper<List> { }; 
//        only the template itself ^^^^ 

如果你想通過List<T,TArgs...>,這是一類,你需要

template<typename T> struct ListHelper;