使用基于模板类类型的单独函数

时间:2015-09-04 13:51:51

标签: c++ hash hashtable

我有一个相当简单的分配来检查哈希表,我们必须创建一个模板类,并使用浮点数,整数和STL字符串作为关键数据类型对其进行测试。

我有类似的设置:

 template<class K, class T>
 class hashTable{
     public:
     private:
 };

当我打电话给班级测试时,我使用:

hashTable<float, data>
hashTable<int, data>

等...我只是不确定如何根据我调用函数时使用的数据类型,让类使用我对每种数据类型的哈希函数。

2 个答案:

答案 0 :(得分:1)

我至少看到三种方法:

首先。为您的所有类型创建一个重载函数hash

hash_t hash(int);
hash_t hash(float);

并在hashTable中拨打hash()

二。创建一个单独的模板化类(或者,一个函数)hash<T>,并将其专门用于intfloat等。然后在hastTable中将其引用为一般方式hash<K>

 template<class T> class hash;
 template<> class hash<int> { hash_t operator() {...} };
 template<> class hash<float> { hash_t operator() {...} };

第三。通过模板参数向hashTable提供所需的类或函数,就像标准std::sort接收到的比较函数一样:

template<class K, class T, class Hash>
class hashTable...

答案 1 :(得分:0)

我建议你像标准那样做。为哈希函数添加模板参数,然后使用标准哈希。如果您有一个标准哈希不适用的自定义类型,那么您可以实现自己的类型并将其包含在模板参数中。

template<class K, class T, class Hash = std::hash<K>>
class hashTable{ 
// stuff 
};