그래서 Minimal 을 만드는 데 관심이 있습니다. 완전하고 검증 가능한 예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
됩니까?
const string* operator->() const { return &_foo; }
사용 예 :
foo i;
++i;
assert(i->length() == 1);
이것이 작동하는 방식은 컴파일러가 operator->
반환 유형이 원시 포인터가 될 때까지 반복 호출을 생성 한 다음 (이 경우를 한 번만 호출 foo::operator->
) 해당 포인터에서 일반 멤버 선택 작업을 수행하는 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다