2016-07-25 157 views
1

此示例代碼生成expected a class template, got std::pair <_T1, _T2>。我嘗試使用struct Struct <std::pair> {};,但然後參數TM變得不可誘導。如何避免這種情況?模板模板部分專業化失敗:「期望類模板」

template <template <class...> class> 
    struct Struct {}; 

    template <class T, class M> 
    struct Struct <std::pair <T, M>> {}; 
+1

什麼'的std :: pair'是類模板,'標準::對<_T1, _T2>'是不是。您可以將主模板聲明更改爲'template struct Struct {};'。 – songyuanyao

回答

2

根據要

template <template <class...> class> 
struct Struct {}; 

template <> 
struct Struct <std::pair> 
{ 
    // Specialization 
}; 

template <typename> struct Struct {}; 

template <typename First, typename Second> 
struct Struct <std::pair<First, Second>> 
{ 
    // Specialization 
}; 
1

這不是您的模板的有效專業化。

究其原因是因爲std::pair<T, M>是類模板std::pair的一個完整的專業化,因此是一個類。你的模板需要一個類模板參數,這正是編譯器告訴你的。