이전 글에서 만들어 본 sv_iterator는 iterator_facade가 필요로 하는 함수들을 구현하여 완성할 수 있었습니다. 하지만 이 중 dereference 를 제외한 나머지 함수들은 단순히 모든 작업을 내부적으로 사용한 vector<C_iter>::const_iterator에 forwarding 하고 있습니다. 그렇다면 이런 대부분의 단순 forwarding 함수들은 작성하지 않아도 되지 않을까 생각할 수 있으며 이런 생각이 반영되어 구현된 클래스가 바로 iterator_adaptor입니다. 물론 Adaptor design pattern이겠죠? :-) 말 그대로 약간만 다른 기존의 iterator 타입을 새로운 iterator 타입으로 adapt 시켜줍니다. 그럼 먼저 iterator_adaptor의 template 인자에 대해 살펴 보겠습니다. template < class Derived , class Base , class Value = use_default , class CategoryOrTraversal = use_default , class Reference = use_default , class Difference = use_default > class iterator_adaptor 여기서 중요한 인자는 Base로 바로 iterator를 만들기 위해 내부적으로 사용되는 iterator 타입을 지정합니다. Base 뒤의 인자들은 모두 use_default로 Base로 지정한 타입에서 필요한 타입을 얻어내서 사용합니다. 하지만 특정 인자를 Base의 것과 다르게 사용하고 싶다면 명시적으로 지정해야 합니다. 예를 들어 list<int*>의 iterator 타입을 가지고 value_type을 pointer가 아닌 value로 사용할 수 있는 iterator를 만들고 싶다면 다음과 같이 선언하면 됩니다. class xx_...