我正在爲hash_map編寫一些散列函數的例子。如果我使用由我的編譯器定義的hash_map,我需要在Hasher中定義Comparer。我知道最好使用tr1 :: unordered_map,但在我的應用程序中,設置最小數量的桶相當重要,並定義平均bucket_size是一個增長的條件。在C++中可能繼承operator()嗎?
所以我想在基類Foo中實現比較器並在其他哈希器中繼承它,比如Bar。
class Foo
{
public:
Foo(const SeedParam& dim);
Foo(const Foo& src);
Foo& operator = (const Foo& src);
virtual bool operator()(const Index2& ind1, const Index2& ind2) const;
size_t operator() (const Index2& ind) const;
enum
{
bucket_size = 4,
min_buckets = 32768,
};
protected:
SeedParam _dim;
const hash_compare<unsigned long long> _stdHasher;
};
class Bar: public Foo
{
public:
Bar(const SeedParam& dim);
size_t operator() (const Index2& ind) const;
};
但是編譯器說:「一個術語不計算爲取兩個參數的函數」中的hash_map編譯這樣的代碼時:
if (!this->comp(this->_Kfn(*_Where), _Keyval))
所以是有可能繼承操作()?我的課有什麼問題?
class'StdDimHasher'有'Bar'作爲構造函數嗎? – Naveen 2010-03-11 09:35:35
不,這是取代原名的錯誤。 謝謝! – flashnik 2010-03-11 09:40:16
你是否打算能夠訪問Bar對象上的方法:virtual bool operator()(const Index2&ind1,const Index2&ind2)const?哦,它已經回答了...請不要刪除答案,以後很難獲得上下文 – mukeshkumar 2010-03-11 10:18:01