【发布时间】:2016-09-08 13:06:27
【问题描述】:
所以为了创建Minimal. Complete, Verifiable Example,我在这里创建了一个玩具iterator(我知道它并不完美,只是为了提问):
class foo : public iterator<input_iterator_tag, string> {
string _foo;
static const size_t _size = 13;
public:
const string& operator*() { return _foo; }
const foo& operator++() {
_foo += '*';
return *this;
}
const foo operator++(int) {
auto result = *this;
_foo += '*';
return result;
}
bool operator==(const foo& rhs) { return _foo.empty() != rhs._foo.empty() && _foo.size() % _size == rhs._foo.size() % _size; }
bool operator!=(const foo& rhs) { return !operator==(rhs); }
};
我读到InputIterator 需要定义成员选择运算符。间接运算符很有意义,但成员选择运算符在这里让我感到困惑。 foo 的成员选择运算符将如何实现?
【问题讨论】:
-
顺便说一下,前缀 ++ 运算符应该返回
foo&而不是const foo&否则您将无法执行++(++i)- 它缺少return语句。
标签: c++ iterator operators member indirection