Я попытался написать класс итератора внутри собственного класса контейнера, который я создал, и я определил черты внутри класса, которые сделали написание этой строки
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;
};
}