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(){}' –