我写了一个简短的实用函数,可以“包装”可迭代容器,以便我可以使用基于范围的
for
向后遍历它。template <typename Iterable>
struct ReverseWrapper {
private:
Iterable& m_iterable;
public:
ReverseWrapper(Iterable& iterable) : m_iterable(iterable) {}
auto begin() const ->decltype(m_iterable.rbegin()) {
return m_iterable.rbegin();
}
auto end() const ->decltype(m_iterable.rend()) {
return m_iterable.rend();
}
};
template <typename Iterable>
ReverseWrapper<Iterable> reverseIterate(Iterable& list) {
return ReverseWrapper<Iterable>(list);
}
这对于C++的可迭代对象有效,但对于静态数组无效。 一个对象必须具备什么条件才能支持使用基于范围的 for
进行迭代? 应该如何最好地解决这个问题?
rbegin
和rend
来完善它,以求完整性。 - Morwenn