我正在使用谷歌稀疏散列图库。我有以下课程模板:
template <class Key, class T,
class HashFcn = std::tr1::hash<Key>,
class EqualKey = std::equal_to<Key>,
class Alloc = libc_allocator_with_realloc<std::pair<const Key, T> > >
class dense_hash_map {
.....
typedef dense_hashtable<std::pair<const Key, T>, Key, HashFcn, SelectKey,
SetKey, EqualKey, Alloc> ht;
.....
};
现在我将自己的类定义为:
class my_hashmap_key_class {
private:
unsigned char *pData;
int data_length;
public:
// Constructors,Destructor,Getters & Setters
//equal comparison operator for this class
bool operator()(const hashmap_key_class &rObj1, const hashmap_key_class &rObj2) const;
//hashing operator for this class
size_t operator()(const hashmap_key_class &rObj) const;
};
现在,我想将my_hashmap_key_class
作为Key
,my_hashmap_key_class::operator()(const hashmap_key_class &rObj1, const hashmap_key_class &rObj2)
作为EqualKey
,将my_hashmap_key_class::operator()(const hashmap_key_class &rObj)
作为HashFcn
传递给dense_hash_map
在主函数中使用它作为参数:
main.cpp中:
dense_hash_map<hashmap_key_class, int, ???????,???????> hmap;
将类成员函数作为模板参数传递的正确方法是什么?
我尝试过像:
dense_hash_map<hashmap_key_class, int, hashmap_key_class::operator(const hashmap_key_class &rObj1, const hashmap_key_class &rObj2),hashmap_key_class::operator()(const hashmap_key_class &rObj)> hmap;
但由于未检测到运算符,因此出现编译错误。请帮我弄清楚我做错了什么。
答案 0 :(得分:0)
正如评论中所讨论的,您应该将相等性写为operator==
。另外,要么使这些运算符静态,要么删除它们的一个参数(“this”指针将是相等测试的左手操作数),否则它们将无法按预期工作。
//equal comparison operator for this class
bool operator==(const hashmap_key_class &rObj2) const;
//hashing operator for this class
size_t operator()() const;
然后,您的类已准备就绪,可以使用以下客户端代码:
my_hashmap_key_class a = ...;
my_hashmap_key_class b = ...;
a == b; // calls a.operator==(b), i.e. compares a and b for equality
a(); // calls a.operator()(), i.e. computes the hash of a
然后,您可以使用默认模板参数。