我目前在使用 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 吗?(注意:我不想改变我的函子结构)
编辑:这是我从我的实际解决方案中得到的错误消息
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 (我已经翻译了我的代码以将其粘贴到此处)。