子类化 C++ Map/Dictionary
Subclassing C++ Map/Dictionary
我的 class 继承自地图对象:
这是我尝试实现的方法:
double MyCustomClass::returnValueForKey(string key){
return this->find(key); //<--- No Viable conversion from iterator
}
我怎样才能让这样的东西工作?
如果您正在谈论的 Map 对象是 std::Map
,那么让 std::Map
对象成为您的 MyCustomClass
的成员并以这种方式扩展功能会更好.
除了一些可以被认为是主观的设计原因之外,这里真正的罪过是扩展一个没有虚拟析构函数的class。
这意味着当您在 MyCustomClass
对象之一上调用 delete
时,父对象 class 的析构函数将永远不会被调用。
要解决编译代码的机械问题,您只需取消引用生成的迭代器:
return find(key)->second;
当然这是一个糟糕的解决方案,因为问题本身是从我们已经做出错误选择的位置开始的。
- 为什么不简单地使用
[]
运算符而不是此自定义代码?
- 为什么一开始还要派生自
std::map
?这是 a bad idea,无论问题是什么,几乎肯定有更好的方法来解决它。
- 即使此代码正确,如果
key
不存在于地图中会怎样?
我的 class 继承自地图对象:
这是我尝试实现的方法:
double MyCustomClass::returnValueForKey(string key){
return this->find(key); //<--- No Viable conversion from iterator
}
我怎样才能让这样的东西工作?
如果您正在谈论的 Map 对象是 std::Map
,那么让 std::Map
对象成为您的 MyCustomClass
的成员并以这种方式扩展功能会更好.
除了一些可以被认为是主观的设计原因之外,这里真正的罪过是扩展一个没有虚拟析构函数的class。
这意味着当您在 MyCustomClass
对象之一上调用 delete
时,父对象 class 的析构函数将永远不会被调用。
要解决编译代码的机械问题,您只需取消引用生成的迭代器:
return find(key)->second;
当然这是一个糟糕的解决方案,因为问题本身是从我们已经做出错误选择的位置开始的。
- 为什么不简单地使用
[]
运算符而不是此自定义代码? - 为什么一开始还要派生自
std::map
?这是 a bad idea,无论问题是什么,几乎肯定有更好的方法来解决它。 - 即使此代码正确,如果
key
不存在于地图中会怎样?