我有一个包装C++ map的类。我希望仅覆盖迭代器解引用操作,以只返回map的值而不是键。这是否可能,而不必重新实现整个std::map迭代器(尽可能避免这样做)?以下是代码:
#include <map>
using std::map;
class X {
using Type = map<int, double>;
using const_iterator = typename Type::const_iterator;
public:
void insert(int key, double value) {
my_map[key] = value;
}
const_iterator cbegin() const { return my_map.cbegin(); }
const_iterator cend() const { return my_map.cend(); }
const_iterator begin() const { return my_map.cbegin(); }
const_iterator end() const { return my_map.cend(); }
private:
Type my_map;
};
int main() {
X x;
double i;
for (const auto& it : x) {
i = it.second; // works
i = it; // fails
}
}
void insert(int key, double value) {
--map::insert
和map::operator []
之间有很大的区别。你的包装器通过只向调用者提供[ ]
来混淆两者。 - PaulMcKenzie