(C ++)reverse_iterator无法解除引用

时间:2017-12-17 16:42:21

标签: c++ inheritance iterator

我的类有一个迭代器和reverse_iterator,看起来像这样:

template<typename T>
class OwnClass {
    ...
    class iterator :
            public std::iterator<std::random_access_iterator_tag, T> {
       ...
       const T& operator*() const {...}
       const T*& operator->() const {...}
    };

    class reverse_iterator :
            public std::reverse_iterator<iterator> {
    public:
        using std::reverse_iterator<iterator>::reverse_iterator;
    };
};

所以,有一个问题:reverse_iterator无法解除引用:

OwnClass<int> k;
std::cerr << *(k.begin()) << std::endl; // ok
std::cerr << *(k.rbegin()) << std::endl; // error

编译器说问题就在这里:

../iterator:650:64: error: binding value of type 'const int' to reference to type 'int' drops 'const' qualifier
reference operator*() const {_Iter __tmp = current; return *--__tmp;}
                                                           ^~~~~~~~

我认为这是因为我没有以正确的方式使用reverse_iterator适配器。那么,我该怎么办?

(将reverse_iterator变成一个类是不好的,我重写了所有迭代器的方法,这就是我需要从std :: reverse_iterator :: reverse_iterator继承的原因)

0 个答案:

没有答案