作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在为我的对象编写哈希函数。感谢 Generic Hash function for all STL-containers,我已经可以散列容器并组合散列了.但是我的类(class)也有枚举。当然我可以为每个枚举创建一个散列函数,但这似乎不是一个好主意。是否可以为 std::hash
创建一些通用规范,以便它可以应用于每个枚举?类似的东西,使用 std::enable_if
和 std::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/
我是一名优秀的程序员,十分优秀!