我的类有一个迭代器和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继承的原因)