为一个类,构建一个Hash Function。有两个办法,一是设计为成员函数,但是为了调用成为函数对象,需要重载operator();二是设计成普通函数。第二种方法中,<>中第二个模板参数是函数类型,创建时还要将真正的函数地址放进来。
将各种基本元素类型的hash组合起来,std::hash< std::string>()是一个对象,可以当函数来使用。
typename… Types任意多的模板参数,可变参数模板。函数1和函数2,函数3的区别是第一个模板参数的类型不一样,虽然同名函数。其实先调用的都是最泛化的版本,这里是函数1,假设原来参数有8 个,产生一个种子(seed),即一个种子加8个参数。然后调用函数2,函数2将8个参数变成1+7,将这1个参数去变化种子,这时候就是种子+7个参数,编译期递归编译。
可变参数模板将不定量的参数拆解,进行递归。种子是pass_by_reference,会一直改变。借由这个可变参数模板可以任意参数类型,任意参数个数。
种子的运算:产生的数字越乱越好。
0x9e3779b9这个16进制数:
侯捷C++ stl体系结构与源码剖析:一个万能的hash function
最新推荐文章于 2021-11-23 17:23:24 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)