У меня сейчас проблема с шаблоном класса в C ++.В настоящее время я делаю хеш-таблицу.
Я использую функтор в качестве шаблона класса, чтобы указать мою хеш-функцию для каждого экземпляра таблицы.
IE: в одной таблице есть целые числа дляего ключи, строки для его значений.У другого могут быть строки для его ключей и целые числа для его значений и т.д ...
class HashString
{
public:
unsigned long operator()(std::string& key, const unsigned int tableSize)
{
// .....
}
};
template<typename keyType, typename valueType, class HashFunctor>
class HashTable
{
public:
// ....
private:
HashFunctor myHash;
};
А теперь, скажем, я хочу вызвать метод myHash для хеширования ключа, я бы сначала вызвалэто делается:
myHash(key, table.size())
Но gcc не находит перегрузку функции для HashFuntor (string, unsigned int), например.
Может кто-нибудь сказать мне, как я могу вызвать myHash?(Примечание: я не хотел бы изменять свою структуру функторов)
edit: это сообщение об ошибке, которое я получаю из моего фактического решения
instantiated from ‘void tp3::Table<TypeClef, TypeDonnee, FoncHachage>::insert(const TypeClef&, const TypeDonnee&) [with TypeClef = int, TypeDonnee = std::basic_string<char, std::char_traits<char>, std::allocator<char> >, FoncHachage = tp3::HacheString]’
no match for call to ‘(tp3::HacheString) (tp3::Table<int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, tp3::HacheString>::HashEntry&)’
Редактировать: везде, где говорится, что HacheString находится вфакт HashString (я перевел свой код, чтобы вставить его сюда).