【发布时间】:2013-03-12 17:11:26
【问题描述】:
我正在尝试实现一个“删除”shared_ptr 的 map<T, shared_ptr<U>> 迭代器,即取消对 pair<T, U&> 的引用。我需要这个来调整 map 上的包装器以适应基于范围的 for 循环。
boost::indirect_iterator 似乎是为这种需求而设计的。我试过这个:
typedef std::map<int, std::shared_ptr<int>> M;
typedef boost::indirect_iterator<M::iterator, std::pair<int, int>> It;
由于indirect_iterator 要求,这不起作用:
表达式 *v,其中 v 是 iterator_traits::value_type 的对象,应该是有效的表达式并且可以转换为引用。
这个任务可以使用boost::indirect_iterator吗?如果没有,我可以用boost::iterator_adaptor 来做吗?
【问题讨论】:
-
map | boost::adaptors::map_values | boost::adaptors::indirected
标签: c++ boost c++11 iterator boost-iterators