模板模板部分特化失败:"期望一个类模板"

时间:2016-07-25 08:14:55

标签: c++ templates partial-specialization

此示例代码生成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>> {};

2 个答案:

答案 0 :(得分: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 :(得分:1)

这不是您模板的有效专业化。

之所以如此,是因为std::pair是类模板{{1}}的完全特化,因此是一个类。您的模板需要一个类模板参数,这正是编译器告诉您的。