당신이 필요한 모든 종류의/연산자를 정의하는 시도 유무 :
#include <iterator>
class nit {
public:
typedef int difference_type;
};
int main() {
const nit test1;
std::distance(test1, test1);
return 0;
}
오류를 준다?
#include <iterator>
struct nit
{
typedef std::random_access_iterator_tag iterator_category;
typedef int value_type;
typedef int difference_type;
typedef int* pointer;
typedef int& reference;
bool operator==(nit const&)
{
return true;
}
bool operator!=(nit const&)
{
return false;
}
int operator-(nit const&)
{
return 0;
}
nit()
{
}
};
int main()
{
nit const test1;
std::distance(test1, test1);
return 0;
}
다음 해결책이 될 수 있습니다. http://www.cplusplus.com/forum/general/11428/. –
클래스를 ['std :: iterator'] (http://en.cppreference.com/w/cpp/iterator/iterator) 인스턴스에서 상속 해보십시오. 나는'std :: iterator_traits'가 그 것을 상속받은 것에 대해서만 전문화되었다고 생각할 수 있습니다. –
더 나아가,'class nit : public std :: iterator'로 더 얻을 수 있습니다 만,'T'는 void 형이 아니어야합니다. 이것이 작동하려면'operator-'. 양자 택일 적으로 당신은'bidirectional_iterator_tag'을 가질 수 있지만, 증분 자와 비교자를 제공해야합니다. –