1#ifndef NEFORCE_CORE_INTERFACE_IITERATOR_HPP__
2#define NEFORCE_CORE_INTERFACE_IITERATOR_HPP__
12NEFORCE_BEGIN_NAMESPACE__
28template <
typename Iterator>
31 constexpr Iterator& derived()
noexcept {
return static_cast<Iterator&
>(*this); }
33 constexpr const Iterator& derived()
const noexcept {
return static_cast<const Iterator&
>(*this); }
40 NEFORCE_NODISCARD
constexpr decltype(
auto)
operator*() const noexcept {
return derived().dereference(); }
46 NEFORCE_NODISCARD
constexpr decltype(
auto) operator->() const noexcept {
return &(derived().dereference()); }
53 derived().increment();
62 Iterator temp = derived();
63 derived().increment();
72 derived().decrement();
81 Iterator temp = derived();
82 derived().decrement();
91 template <
typename Distance>
102 template <
typename Distance>
103 NEFORCE_NODISCARD
constexpr Iterator
operator+(Distance n)
const noexcept {
104 Iterator temp = derived();
115 template <
typename Distance>
117 return it.derived() + n;
125 template <
typename Distance>
127 derived().advance(-n);
137 template <
typename T>
139 Iterator temp = derived();
149 NEFORCE_NODISCARD
constexpr decltype(
auto)
operator-(
const Iterator& other)
const noexcept {
150 return derived().distance_to(other);
156NEFORCE_END_NAMESPACE__
typename enable_if< Test, T >::type enable_if_t
enable_if的便捷别名
constexpr Iterator & operator++() noexcept
前置递增操作符
constexpr enable_if_t<!is_same_v< T, Iterator >, Iterator > operator-(const T n) const noexcept
减法操作符
constexpr Iterator & operator-=(Distance n) noexcept
复合减法赋值操作符
constexpr Iterator operator+(Distance n) const noexcept
加法操作符
constexpr Iterator & operator+=(Distance n) noexcept
复合加法赋值操作符
constexpr Iterator & operator--() noexcept
前置递减操作符
constexpr Iterator operator--(int) noexcept
后置递减操作符
friend constexpr Iterator operator+(Distance n, const iiterator &it) noexcept
友元加法操作符
constexpr Iterator operator++(int) noexcept
后置递增操作符