現在、C++ のクラス テンプレートで問題が発生しています。現在、ハッシュテーブルを作成しています。
テーブルのインスタンスごとにハッシュ関数を指定するクラス テンプレートとしてファンクターを使用しています。
IE: 1 つのテーブルには、キーに整数、値に文字列があります。別のキーには文字列があり、値には整数などがあります...
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 であると書かれている箇所はどこでも (コードを翻訳してここに貼り付けました)。