【发布时间】:2025-12-08 19:00:01
【问题描述】:
我正在尝试对 STL 映射容器进行包装,以便添加一个 const 方法来返回给定键的值。在 map 中,operator[] 不是 const,find() 需要取消引用才能获取值 (map.find()->second)。顺便说一句,我的一些“研究”基于Idiomatic C++ for reading from a const map。
到目前为止的代码(都在一个头文件中):
#include <map>
template <typename K, typename V>
class easymap : public std::map<K, V>
{
//Constructor
easymap() : std::map<K, V>() {};
//The get method
V get(K key)
{
std::map<K, V>::const_iterator iter(find(key));
return iter != end() ? iter->second : V();
}
};
当我尝试编译它时,我收到以下错误:
在成员函数 `V easymap::get(K)' 中: 预期的';'在“迭代”之前 `iter' 未在此范围内声明 `end' 没有依赖于模板形参的参数,因此必须有 `end' 的声明| (如果你使用 `-fpermissive',G++ 将接受你的代码,但不允许使用未声明的名称)我尝试这样做是否有意义?如果是这样,我该如何进行这项工作?如果没有,我将如何实现我正在寻找的效果?
【问题讨论】:
-
也看看this线程。
-
请注意,该线程中接受的答案只是将其实现为免费功能。
map.get(x);和get(map, x);之间并没有太大区别 - 您还忘记了映射还有两个模板参数(谓词和分配器)。
标签: c++ templates stl map constants