Я пишу несколько примеров хеш-функций для hash_map. Если я использую hash_map, определенный моим компилятором, мне нужно определить Comparer в Hasher. Я знаю, что лучше использовать tr1 :: unordered_map, но в моем приложении важно установить довольно большое минимальное количество сегментов и определить среднее значение bucket_size - условие для роста.
Так что я хотел бы реализовать компаратор в базовом классе 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))
Так можно ли наследовать оператор ()? Что не так с моими уроками?