模板模板部分专业化失败:"expected a class template"
Template template partial specialization failure: "expected a class template"
此示例代码生成 expected a class template, got std::pair <_T1, _T2>
。我尝试使用 struct Struct <std::pair> {};
,但随后参数 T
和 M
变得不可推导。如何避免这种情况?
template <template <class...> class>
struct Struct {};
template <class T, class M>
struct Struct <std::pair <T, M>> {};
这不是您模板的有效专业化。
原因是因为 std::pair<T, M>
是 class 模板 std::pair
的完全专业化,因此是 class。您的模板需要一个 class 模板参数,这正是编译器告诉您的内容。
看你想要什么
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
};
此示例代码生成 expected a class template, got std::pair <_T1, _T2>
。我尝试使用 struct Struct <std::pair> {};
,但随后参数 T
和 M
变得不可推导。如何避免这种情况?
template <template <class...> class>
struct Struct {};
template <class T, class M>
struct Struct <std::pair <T, M>> {};
这不是您模板的有效专业化。
原因是因为 std::pair<T, M>
是 class 模板 std::pair
的完全专业化,因此是 class。您的模板需要一个 class 模板参数,这正是编译器告诉您的内容。
看你想要什么
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
};