왜 중복 자료형 삭제가 필요한 걸까?
이것도 3.9, 3.8, 3.7과 마찬가지로 기존의 자료형에서 약간의 변형만 주어 새로운 자료형을 손쉽게 만들기 위함에 있다.
어떻게 하면 typelist의 중복 자료형을 삭제 할 수 있을까?
우선 생각해 볼 것이 있다.
1. 중복된 자료형인지 어떻게 판별 할 수 있을까?
typelist에서 첫번째 타입은 온전히 확인 가능하다. 그러므로 이 첫번째 타입 즉, Head 타입이 Tail타입에 있는지 체크하면 될 것이다.
2. 중복되었다면 어떻게 지울 수 있을까?
3.9에서 특정 타입을 지우는 방법을 배웠다. Tail 에서 Head를 지우고 이 결과 타입을 다시 중복제거 알고리즘을 돌리면 될 것이다.
3. 중복되지 않았을 경우에는 어떻게 처리 할 수 있을까?
Erase함수를 통해서 중복되지 않았을 경우 아무것도 하지 않으므로, 이 부분은 신경쓸 필요가 없다. 예외적으로 중복제거 흐름이 typelist의 끝 타입인 NullType까지 왔다면 NullType을 리턴해 주면서 흐름을 멈추게 하면 된다.
중복제거 알고리즘의 시나리오를 완성했으니 코드로 옮겨 보자.
처음에 나는 EraseAll 을 사용해서 구현했었다. 책과 비교해 보니, 책 코드와 내 코드가 좀 다르더라, 혹시 Erase가 되지 않을까 란 생각에 해보니까 Erase로도 잘 된다.
책과 크게 다르지 않으니, 책의 소스와 내 소스를 보면 좋을것 같다.(만들고 나니 저자는 어떻게 저런 생각을 했지? 라는 생각이 든다.)
<textarea class="brush:cpp">
</textarea>
'책 정리 > Modern C++ Design' 카테고리의 다른 글
Part 3, 테크닉 3-13 Typelist를 통한 클래스 생성, 2부 (360) | 2010.03.18 |
---|---|
Part 3, 테크닉 3-13 Typelist를 통한 클래스 생성, 1부 (0) | 2010.03.14 |
Part 3, 테크닉 3-12 부분적으로 정렬된 Typelist 2부 (360) | 2010.03.13 |
Part 3, 테크닉 3-12 부분적으로 정렬된 Typelist 1부 (360) | 2010.03.08 |
Part 3, 테크닉 3-11 Typelist의 한 원소를 다른 자료형으로 바꾸기 (359) | 2009.09.04 |
Part 3, 테크닉 3-9 typelist에서 특정 자료형 제거하기 (0) | 2009.09.01 |
Part 3, 테크닉 3-8 typelist에 자료형 또는 typelist 추가하기 (0) | 2009.09.01 |
Part 3, 테크닉 3-7 Typelist에 대한 탐색 (0) | 2009.09.01 |
Part 3, 테크닉 3-6 Index에 대한 접근 (0) | 2009.08.31 |
Part 3, 테크닉 3-5 중간 첨언, 왜 재귀밖에 사용하지 못할까? (0) | 2009.08.31 |
최근댓글