現在、C++のクラステンプレートに問題があります。私は現在ハッシュテーブルを作っています。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と呼ぶ方法を教えてもらえますか? (注:私はファンクタの私の構造を変更したくない)
編集:どこでもそれはHacheStringが実際のHashStringであると言う(:これは私が私の実際のソリューション
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&)’
編集から取得するエラーメッセージですここに貼り付けるためにコードを翻訳しました)。
実際のエラーとそれに対応するコードを掲載することはできますか? –
@Alexエラーメッセージの1つをアップロードしました。彼らはすべて同じことを言及している(私は私の呼び出しを持っているので) – Pacane
boost :: unordered_mapはあなたが望むものであるように思えるだろう(あなたはstd :: tr1 :: unordered_map、またはstd ::としてそれにアクセスすることができるかもしれないunordered_map in C++ 0x)。車輪を改造しないでください。 –