더북(TheBook)

코드가 좀 많아 보이지만, 이해하기 어려운 코드는 아니다. 반복자와 관련된 Numeric_Range 객체에 대한 참조를 저장하는 멤버 range가 하나 있다. 또한, Numeric_Range 객체는 반복자가 가리키는 범위에 있는 값도 저장한다. 생성자 매개변수는 범위 객체에 대한 참조를 지정한다. 생성자는 range 참조 멤버를 인수로 초기화하고, value 멤버는 범위의 start 값으로 설정한다. 나머지 멤버들은 역참조 연산자, 전치 증가 연산자, 후치 증가 연산자, 비교 연산자를 정의한다. 범위의 끝 반복자를 역참조하거나 증가하는 것은 허용되지 않으므로 증가 연산자 함수나 역참조 연산자 함수는 피연산자가 끝 반복자이면 예외를 일으킨다. 즉, value 멤버가 범위의 마지막 값에서 하나 더 증가한 값을 가리키는 경우 예외를 일으킨다. 여기서는 간단하게 구현하기 위해 표준 익셉션 객체를 던졌다.

// Numeric_Range.h for Ex2_07
// 범위를 위한 클래스 템플릿과 범위 지정을 위한 반복자 클래스 템플릿을 정의
#ifndef NUMERIC_RANGE_H
#define NUMERIC_RANGE_H
 
#include <exception>                          // 표준 익셉션 타입
#include <iterator>                           // 반복자 타입
#include <type_traits>                        // 컴파일 타임 타입 체킹
 
template <typename T> class Numeric_Iterator; // 템플릿 타입 정의
 
// Numeric_Range<T> 템플릿 정의, 생략…
// Numeric_Iterator<T> 템플릿 정의, 생략…
 
#endif
 

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.