gpt4 book ai didi

任何枚举类型的 C++11 哈希函数

转载 作者:可可西里 更新时间:2023-11-01 15:41:31 25 4
gpt4 key购买 nike

我正在为我的对象编写哈希函数。感谢 Generic Hash function for all STL-containers,我已经可以散列容器并组合散列了.但是我的类(class)也有枚举。当然我可以为每个枚举创建一个散列函数,但这似乎不是一个好主意。是否可以为 std::hash 创建一些通用规范,以便它可以应用于每个枚举?类似的东西,使用 std::enable_ifstd::is_enum

namespace std {
template <class E>
class hash<typename std::enable_if<std::is_enum<E>::value, E>::type> {
public:
size_t operator()( const E& e ) const {
return std::hash<std::underlying_type<E>::type>()( e );
}
};
};

附言。此代码无法编译

error: template parameters not used in partial specialization:
error: ‘E’

最佳答案

你的 E无法推导参数,因为编译器无法知道您的 enable_if<...>::type最终表示 E再次(事实上,它有一些特化设计不这样做!)。它被称为 E 的“非推导上下文” .

如果hash只有一个参数,没有办法(我知道)SFINAE 出你的部分特化。

关于任何枚举类型的 C++11 哈希函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9646297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com