как обратиться к iterator_traits :: ссылка на класс итератора? - PullRequest
0 голосов
/ 02 мая 2020

Я попытался написать класс итератора внутри собственного класса контейнера, который я создал, и я определил черты внутри класса, которые сделали написание этой строки

reference operator*() const {return value->item;}

, затем, после некоторых исследований в Интернете, я нашел лучший способ сделать это - определить iterator_traits внутри пространства имен std для класса итератора, а затем написать мой класс итератора вне класса контейнера, что сделало код более читабельным, но предыдущую ошибку, которую я исправил, написав шаблон

T& operator*() const {return value->item;}

так что мне интересно, есть ли способ, которым я все еще могу использовать первую строку кода

template <typename T>
class CustomIterator{
    using node = node<T>;
    node *value;
public:


    T& operator*() const {return value->item;}
    T& operator[] (size_t index) const { return *(index + *this); }

};

namespace std {
    template<typename T>
    class iterator_traits<CustomIterator<T> >
    {
    public:
        using difference_type = std::ptrdiff_t;
        using size_type = std::size_t;
        using value_type = T;
        using pointer = T*;
        using reference = T&;
        using iterator_category = std::random_access_iterator_tag;
    };
}
...