мне нужно impelement в hashTable класса в C++, поэтому я решил создать класс шаблона:Как я могу обрабатывать различные параметры шаблона в C++?
template <typename key_t, typename value_t>
class HashTable {};
И в этом случае, мне нужно хэш различных типов ключей. я пытался что-то вроде этого:
if(typeid(std::string) == typeid(_key)) {
return StrSum(_key) % TABLE_SIZE;
} else {
return _key % TABLE_SIZE;
}
Но в том случае, TypeID() не время компиляции определенной функции, мой компилятор (МСВС) ударять мне ошибку, что»... нет определенного оператора% для станд :: строка».
Итак, мой вопрос: как я могу это сделать?
Делайте то, что стандарт [ 'станд :: unordered_map'] (http://en.cppreference.com/w/ cpp/container/unordered_map) предоставляет хеш-функцию как параметр шаблона по умолчанию. В качестве разработчика контейнера вы не должны настаивать на решениях, которые могут быть сделаны во время компиляции для запуска. Особенно «типичный» материал, который, как известно, медленный. –
Проклятье слишком поздно с ответом, чтобы поддержать мой комментарий. Вы также можете видеть код в любом случае [здесь] (http://ideone.com/KmkxFR). Реализация hash_table является лишь средством демонстрации и явно не предназначена для правильного использования. –