뭔가 복잡하고 완벽하게 만들려면 좀더 까다롭겠지만,
range-based for loop 또는 std:find 등의 STL algorithm을 이용할 수 있도록 간단하게 만든다면, 아래와 같이 하면 되겠다.
(물론 검증된 것은 아니고, 정말 연습용으로 해 보고 정리하는 것임. 따라서 오류가 있을수도...;;)
template <typename T> class slist는 이미 정의가 되어 있고,
template <typename T> class slist_iterator가 friend로 지정되어 있다.
(또는 slist의 nested class로 구현하여도 되겠다)
처음에는 아래와 같은 type을 노출하지 않았었다.
그 상태로 range-based for loop은 문제가 없었지만, std::find를 호출 했더니, iterator_category를 지정해야 한다는 에러 메시지가 나와서 추가 해 주었다.
그랬더니 std::iterator_traits 뭐라뭐라 에러가 나는데, 뭐라 하는지 전혀 모르겠더라;;
그래서 혹시나 하는 마음에 value_type, reference를 추가 해 보았으나 동일ㅠㅠ
결국, stackoverflow에서 해답을 찾았다. (오늘 알게 된 사실인데, 해당 글의 const_iterator 구현 부분에서 operator*, operator->의 반환값이 그냥 reference, pointer로 되어 있어, 값을 할당하여도 에러가 발생하지 않는다. 이 부분은 수정이 필요함. 맨 아래 전체 소스 참고.)
위의 네 개의 타입과 iterator_category는 반드시 노출되어야 하고,
iterator_category에 따라 필요한 멤버함수들을 구현 해 주면 된다.
정말 간단하게 구현하는 방법은 std::iterator를 상속하여 구현하는 것인데,
이놈이 C++17에서 없어질 예정이므로, 이후 어떻게 해야 할지는 알아봐야 할듯.
아래는, 허접하지만 const_iterator까지 구현한 전체 소스 (__)
'프로그래밍 언어' 카테고리의 다른 글
Magic statics since C++11 (0) | 2018.05.29 |
---|---|
C++로 JAVA의 DataInputStream, DataOutputStream 흉내내기 (0) | 2017.09.14 |
CppCon 2014: Herb Sutter "Lock-Free Programming (or, Juggling Razor Blades)" (1) | 2016.07.25 |
Spirit 3.0.0 (Boost?) (0) | 2016.07.11 |
EXCEL에서 특정 column에서 동일한 값을 갖는 셀(cell)을 같은 색으로 설정하는 VBA (0) | 2016.01.07 |