template<class KeyType, class ValueType, class Hash = std::hash<KeyType> >
class HashMap {
public:
Hash hasher;
HashMap(Hash override_ = hasher) {
hasher = override_;
}
};
這是我的代碼。我期望發生的是,如果構造函數沒有提供默認值hasher
,或者將其更改爲new,否則將其更改爲new。我得到的是:invalid use of non-static data member 'hasher'
。我已經認爲我可以用Hash()
代替hasher
作爲默認值;但是如果我不需要默認的對象但是更復雜的東西呢?爲什麼我的第一次嘗試不能編譯?爲什麼我不能將類構造函數參數設置爲默認值?
的構造函數默認參數都解決了對象施工開始前,所以'hasher'不會在那個時候 –
一個存在好的解決方案是2個構造函數,另一個是'HashMap(){}' –