如何在具有多个参数类型的模板类中专门化一个方法
How to specialize ONLY one method inside a template class with many argument types
我正在用c++实现一个HashTable
模板类,它的原型是这样的:
template<class K, class T, unsigned int containerSize=CONTAINER_SIZE>
class LPHashTableChained{
........
unsigned int hashFunction(K& key);
}
我的问题是我如何专门化我的hashFunction()
方法的行为不同,当K
等于字符串类型
我试图以其正确的格式实现该函数,并在第二次实现中省略class K
参数并将字符串作为类型,如下所示:
1日实现:
template<class K, class T, unsigned int containerSize>
unsigned int LPHashTableChained<K,T,containerSize>::hashFunction(K& key){
}
2日实现:
template<class T, unsigned int containerSize>
unsigned int LPHashTableChained<string,T,containerSize>::hashFunction(const string& key){
}
但是我得到编译错误!!
当K= string
指定hashFunction
时,最简单的方法是什么?
谢谢
不能部分特化模板的成员函数。(完全专门化是可以的。)
对于您的类来说,最好的方法是按照标准库的做法,并将哈希函数作为"策略"类型的模板参数提供:template <typename K, typename V, typename Hash = std::hash<K>>
class HashTable
{
Hash hasher;
// use hasher(x)
};
现在您可以简单地为您的字符串类型指定散列器,或者提供您自己的散列器:
// provide custom
struct MyInsaneHasher { std::size_t operator()(const Foo &) const; };
HashTable<Foo, int, MyInsaneHasher> m1;
// add specialization for `std::hash`:
namespace std
{
template <> struct hash<Bar> { size_t operator()(const Bar&) const; };
}
HashTable<Bar, int> m2;
相关文章:
- C++模板方法专门化联合类型
- 从专用模板方法调用无专门化的模板方法
- 专门化大型模板类中的单个方法
- 模板类模板方法专门化
- 如何在非模板化类中专门化没有参数的模板化方法
- 如何专门化模板化类,以采用不带参数的方法函数类型
- C++模板专门化-只专门化某些方法,其余方法使用默认impl
- 为派生类专门化类模板方法
- C++专门化模板类中的单个方法
- 如何部分专门化非模板类的模板成员方法
- 如何避免在模板专门化中重新定义类方法
- 如何专门化模板类方法基于类型特征?使用std::enable_if对非类函数有效,但对类方法无效
- 为什么模板类的显式方法专门化可以在类内部没有原型声明的情况下工作
- 模板类型的模板方法专门化
- 创建专门化函数模板的最佳方法是什么?
- 如何在具有多个参数类型的模板类中专门化一个方法
- c++模板方法专门化以返回指针或引用
- PTR到结构体和PTR到结构体的向量的模板方法专门化
- 为什么成员模板方法必须在类外使用模板<>专门化
- c++模板专门化方法问题