C ++ - 从类模板调用方法

时间:2010-12-01 00:17:46

标签: c++ templates class hashtable functor

我目前在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(我已将我的代码翻译成粘贴在这里)。

1 个答案:

答案 0 :(得分:2)

HashString中的

operator()是私有的,可能不是const-correct。它应该是一个const成员函数,它采用const std :: string&amp;作为它的第一个参数。第二个参数不需要是const。

你好像用HashEntry作为第二个参数来调用它。什么是HashEntry?它需要一个unsigned int!

这可能已经解决了你的一些问题。

我认为你的HacheString / HashString差异只是一个错字。