}顺序遍历十分方便,但有时候想获取更多的信息(如:当前遍历的位置索引等),就不得不需要获取到当前的迭代器位置。观察foreach的内部实现,_foreach_cur变量存放当前迭代器的信息,但也仅仅如此,无法直观地获取具体的迭代器类型。要使用_foreach_cur变量,必须书写相应的辅助函数.
namespaceboost{
namespaceforeach_detail_{
template<typenameT,typenameC>
inline
typenameboost::iterator_difference<BOOST_DEDUCED_TYPENAMEforeach_iterator<T,C>::type>::type
distance(auto_any_tfirst,auto_any_tlast,type2type<T,C>*)
{
typedefBOOST_DEDUCED_TYPENAMEforeach_iterator<T,C>::typeiter_t;
returnstd::distance(auto_any_cast<iter_t,boost::mpl::false_>(first),
auto_any_cast<iter_t,boost::mpl::false_>(last));
}
}
//namespaceforeach_detail_
}
//namespaceboost获取当前的迭代位置到容器开始的距离:
#defineBOOST_FOREACH_DISTANCE(COL)\
boost::foreach_detail_::distance(BOOST_FOREACH_BEGIN(COL),_foreach_cur,BOOST_FOREACH_TYPEOF(COL))
宏参数COL为容器变量或者返回值为容器的函数,根据foreach的实现技巧,该参数并不会被求值,仅仅用其做模板参数的推导。
使用示例:
长按二维码向我转账
受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。
阅读
好看
已推荐到看一看
你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
取消
分享想法到看一看
确定
最多200字,当前共字