我写了一个简短的实用函数,一个对象来“包装”一个可迭代的容器,这样我就可以使用基于范围的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
?解决这个问题的最佳方法是什么?