私はC++でハッシュテーブルクラスをimpelementする必要があるので、私はテンプレートクラスを作成することにしました:C++でさまざまなテンプレートパラメータを処理するにはどうすればよいですか?
template <typename key_t, typename value_t>
class HashTable {};
そして、この場合は、私は、キーの種類をハッシュする必要があります。 私はそのような何かを試してみました:()をTYPEID
if(typeid(std::string) == typeid(_key)) {
return StrSum(_key) % TABLE_SIZE;
} else {
return _key % TABLE_SIZE;
}
しかし、場合には、私のコンパイラ(MSVS)が私に「...のための定義された演算子%が存在しないというエラーを打つ、コンパイル時に定義関数ではありませんstd :: string "を参照してください。
私の質問は次のとおりです。どうすればいいですか?あなたがオーバーロードを使用することができます
は何をすべきか、標準の[ 'のstd :: unordered_map'](http://en.cppreference.com/w/ cpp/container/unordered_map)はデフォルトのテンプレートパラメータとしてハッシュ関数を提供します。コンテナの実装者は、コンパイル時に実行可能な決定を実行時にプッシュしてはいけません。特に 'typeid'は悪名高く遅いです。 –
私のコメントをバックアップするには、答えが遅すぎる。とにかく[ここ](http://ideone.com/KmkxFR)のコードを参照することもできます。 hash_tableの実装はデモンストレーションの手段にすぎず、明らかに適切な使用を意図していません。 –