反復可能なコンテナーを「ラップ」するためのオブジェクトである短いユーティリティ関数を作成して、範囲ベースの を使用して逆方向に移動できるようにしました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
か? この問題にアプローチする最善の方法は何でしょうか?