我需要在教學貫徹C++ Hashtable類,所以我決定創建一個模板類:如何在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的()情況下,是不是編譯時間定義的函數,我的編譯器(MSVS)打我一個錯誤,」 ......不存在用於定義操作符%的std :: string」。
所以,我的問題是:我該怎麼做?
做什麼標準['的std :: unordered_map'(http://en.cppreference.com/w/ cpp/container/unordered_map)確實提供了一個散列函數作爲默認的模板參數。作爲一個容器實現者,你不應該在編譯時推動可以運行的決策。特別是'typeid'的東西,這是臭名昭着的緩慢。 –
該死的太晚了,回答我的評論。無論如何你都可以看到代碼[here](http://ideone.com/KmkxFR)。 hash_table實現只是演示的一種工具,顯然不適合正確使用。 –