【发布时间】:2019-08-09 22:00:56
【问题描述】:
我有接受 std::vector 迭代器的函数,如
typedef std::vector<Point> Points;
Points ConvexHull(Points::const_iterator first, Points::const_iterator last);
我通常将std 迭代器传递给它们,但有时我需要使用boost 迭代器,例如boost::join 的范围迭代器。我应该如何更改我的函数的参数化,理想情况下没有模板,以便它们接受两个迭代器?此外,我如何在每种类型中指出我需要哪些迭代器概念?
我尝试查看 boost::range 文档,但它让我非常困惑,我不知道从哪里开始。
例如,我找不到boost::range_details::any_forward_iterator_interface 和boost::range_details::any_forward_iterator_wrapper 之间的区别,以及是否应该使用其中任何一个来指定我需要前向迭代器。
编辑:
如果我使用boost::any_range,如何传递非常量左值引用?
例如:
template<typename T>
using Range = boost::any_range<T, boost::random_access_traversal_tag,
T, std::ptrdiff_t>;
f(Range<Point> &points); // defined elsewhere
// -------------
vector<Point> vec;
f(vec); // error; cannot bind non-const lvalue reference to unrelated type
【问题讨论】:
标签: c++ boost iterator std boost-range