【发布时间】:2012-11-09 17:29:09
【问题描述】:
代码是这样的
void buildIt(Object& o, Tokenizer::const_iterator begin, Tokenizer::const_iterator end){
if(begin == end) return;
else{
string parent = *begin;
bool hasChild = (begin+1) != end; //error: class booost::token_iterator<...> has no member named 'advance'
}
}
如何在不移动的情况下检查下一个迭代器是否有效?
【问题讨论】:
-
你的问题是
begin+1。此操作仅在 RandomAccessIterators 上受支持。一般来说,尽量避免使用它。使用boost::next/boost::prev或std::advance。取决于您是否要更改迭代器的状态。 -
我认为在这种情况下它会根据迭代器类型使用它的 std::advance 版本?
-
不,advance 将根据迭代器类型使用正确的方法,而不是
operator+。 -
好酷,只是因为我期待 operator+ 调用 Advance 或类似的东西而感到困惑。那和错误消息说它在使用运算符时找不到提前+