2

如果我有一个检测专业化的特征(即模板类型):

template <typename T>
struct is_specialisation : std::false_type {
};

template <template <typename...> class U, typename... Args>
struct is_specialisation<U<Args...>> : std::true_type {
};

这按预期工作:

traits::is_specialisation<std::vector<int>>::value;              // True
traits::is_specialisation<std::string_view>::value;              // True
traits::is_specialisation<std::tuple<char, int, double>>::value; // True
traits::is_specialisation<float>::value;                         // False

除非参数包类型之一实际上是一个值:

traits::is_specialisation<std::array<char, 4>>::value;  // False

这是因为template <typename...> class U声明是专门针对types的,如果我将其切换到template <auto...> class U它将接受所有值 - 但是有没有一种方法可以声明它可以混合使用类型值?

4

0 回答 0