Я пишу несколько примеров хеш-функций для hash_map. Если я использую hash_map, определенный моим компилятором, мне нужно определить Comparer в Hasher. Я знаю, что лучше использовать 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))
Так можно ли наследовать оператор()? Что случилось с моими классами?
класс 'StdDimHasher' имеет конструкцию' Bar'? – Naveen
Нет, это была ошибка при замене оригинальных имен. Спасибо! – flashnik
Вы собираетесь иметь доступ к методу: virtual bool operator() (const Index2 и ind1, const Index2 и ind2) const на объекте Bar? О, он уже ответил ... пожалуйста, не удаляйте ответы, сложно получить контекст позже. – mukeshkumar