我等一下再听你劝我放弃这份遗产,现在我想了解为什么会出现这个错误。
这里是一个简化的示例,可以在MSVC 2015中重现该问题:
template<typename key_type, typename value_type>
class my_unordered_map : public unordered_map<key_type, value_type>
{
public:
value_type& operator[](const key_type& key)
{
return unordered_map<key_type, value_type>::operator[](key);
}
};
int main()
{
my_unordered_map<string, int> m;
m["x"] = 42;
}
到目前为止,my_unordered_map 的唯一意图是重写一个成员函数并将调用委派给其被重写的基类成员函数。但是在 MSVC 2015 中我遇到了错误:
binary '=': no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
有什么想法吗?
* 好的,现在你可以试着说服我不要继承。我的主要需求是要一个unordered_map加上一个额外的特性。但除了这个特性之外,我仍希望保留整个unordered_map的接口和实现,继承似乎是最直接的方法。虽然语言允许这样做,但我没有计划在两种类型的映射之间进行多态切换,因此虚拟或缺少并不是问题。