라이브러리에 반복기 클래스 (예 : MyIterator
)를 쓰고 있습니다.const 반복자 및 비 const 반복자 만들기
std::vector
의 iterator
같은 std::vector
MyIterator
동안 행위의 const_iterator
처럼 const MyIterator
행위를 만들기 위해 오버로드 CONST을 사용하는 것이 좋습니다?
라이브러리 사용자/개발자가 혼란에 빠질 수 있습니까? 대안은 CONST와 const가 아닌 반복자로 전문화 할 수있는 단일 반복자 클래스를 구현하는 템플릿을 사용하는 것입니다
// std::iterator example
#include <iostream> // std::cout
#include <iterator> // std::iterator, std::input_iterator_tag
class MyIterator : public std::iterator<std::input_iterator_tag, int>
{
mutable int* p;
public:
MyIterator(int* x) :p(x) {}
MyIterator(const MyIterator& mit) : p(mit.p) {}
MyIterator& operator++() {++p;return *this;}
MyIterator operator++(int) {MyIterator tmp(*this); operator++(); return tmp;}
bool operator==(const MyIterator& rhs) {return p==rhs.p;}
bool operator!=(const MyIterator& rhs) {return p!=rhs.p;}
const int& operator*() const {return *p;} // <-- const overload
int& operator*() {return *p;}
};
: 같은
구현 될 것이다. 나는 현재 그것을하고있다 (나는 부스트가 그렇게하고 있다고 들었다 ...). 그러나 범위를 구현할 때 템플릿이 매우 빠르게 복잡해지고 범위 범위가 확장됩니다 (루프 기반 중첩 범위와 같이).
지옥은 'mit'입니까? 질문에 대한 답을 줄 수도 있습니다. – George
@George itterator가'mit'라고 부르는대로 가져 가겠습니다. 아마도'my_iterator'의 줄임말입니다. – NathanOliver
혼란 스러울 지 모르지만 그건 나뿐입니다. – jrok