构造接受任何可迭代类型的std :: hash函数

时间:2019-06-06 21:46:09

标签: c++ templates c++17 sfinae

我已经尝试实现一种适用于任何迭代器类型的std::hash函数,其中用户必须为其类型T实现哈希函数。 我对std::hash的{​​{1}}函数的最初实现如下所示:

std::array

为支持任何迭代器,我一直在尝试使用sfinae,可以在下面看到我当前对容器类型template <typename T, size_t N> struct std::hash<std::array<T, N>> { std::size_t operator()(const std::array<T, N>& x) const { auto hash_func = std::hash<T>{}; size_t h_val{}; for (T t : x) { h_val = h_val ^ hash_func(t); } return h_val; } }; 的实现:

is_container

我的问题是我似乎无法匹配template <typename T, typename = void> // primary declaration struct is_container: std::false_type {}; // when all specializations fail template <typename T> struct is_container< // specialization T, // conditions: std::void_t<decltype(std::begin(std::declval<T&>()))> >: std::true_type {}; template <typename C> // *_v value constexpr auto is_container_v = is_container<C>::value; 的必需参数。

0 个答案:

没有答案