我正在使用google sparse hashmap庫。我有以下類模板:如何傳遞類公共成員函數作爲模板參數?
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;
,但我得到的編譯錯誤爲未檢測的操作。請幫助我認識到我做錯了什麼。
我想你希望這些操作符是'靜態'。另外,爲什麼不使用'operator =='進行等式比較呢? (您仍然需要手動定義) – leemes
使運算符爲'靜態'。 –
或者使用相當奇怪的,但並非沒有聽說過的事實,即你的類是它自己的平等函子,並且只需傳遞'my_hashmap_key_class'。請注意,將構造一個實例來執行比較,而且這兩個參數都不是構造的比較器本身。 'HashFn'參數也是如此。我沒有經常看到它,但它應該像定義此代碼一樣無所不能。注意,你的班級必須支持默認構造(我假設它)。 – WhozCraig