如何获取std::array的模板?
How to get template of std::array?
我写了一个简单的元程序来检查 2 个模板是否相同。这是:
template<template<class...> class _Tp, template<class...> class _Up>
struct is_same_template : std::false_type {};
template<template<class...> class _Tp>
struct is_same_template<_Tp, _Tp> : std::true_type {};
它有效(但不适用于 std::array)
is_same_template<std::vector, std::vector>::value // 1
is_same_template<std::map, std::map>::value // 1
is_same_template<std::vector, std::map>::value // 0
is_same_template<std::vector, std::array>::value // Error: type/value mismatch at argument 2
我该如何解决?
您可以比较类型:
template<class T1, class T2> struct is_same_template: std::false_type {};
template<template<class, std::size_t> struct StdArray,
class T1, std::size_t n1, class T2, std::size_t n2>
struct is_same_template<StdArray<T1, n1>, StdArray<T2, n2>>: std::true_type {};
或为每个模板签名定义一个单独的比较器:
template<template<class, std::size_t, class...> class T1,
template<class, std::size_t, class...> class T2>
struct is_same_template_T1_n1: std::false_type {};
template<> struct is_same_template_T1_n1<std::array, std::array>: std::true_type {};
一般来说,不存在同样接受类型参数和非类型参数的通用模板接口。
我写了一个简单的元程序来检查 2 个模板是否相同。这是:
template<template<class...> class _Tp, template<class...> class _Up>
struct is_same_template : std::false_type {};
template<template<class...> class _Tp>
struct is_same_template<_Tp, _Tp> : std::true_type {};
它有效(但不适用于 std::array)
is_same_template<std::vector, std::vector>::value // 1
is_same_template<std::map, std::map>::value // 1
is_same_template<std::vector, std::map>::value // 0
is_same_template<std::vector, std::array>::value // Error: type/value mismatch at argument 2
我该如何解决?
您可以比较类型:
template<class T1, class T2> struct is_same_template: std::false_type {};
template<template<class, std::size_t> struct StdArray,
class T1, std::size_t n1, class T2, std::size_t n2>
struct is_same_template<StdArray<T1, n1>, StdArray<T2, n2>>: std::true_type {};
或为每个模板签名定义一个单独的比较器:
template<template<class, std::size_t, class...> class T1,
template<class, std::size_t, class...> class T2>
struct is_same_template_T1_n1: std::false_type {};
template<> struct is_same_template_T1_n1<std::array, std::array>: std::true_type {};
一般来说,不存在同样接受类型参数和非类型参数的通用模板接口。