Purpose-built post
1부를 끝내기 위해서 만들었다.
Content
1부에서 만들어진 DerivedToFront 함수(함수라 칭하는게 옳다.)는 최대 상속 클래스를 찾았다. 라는 전제에서 만들어진 함수이다. 그러므로, 이제 "어떻게 최대 상속 클래스를 찾을 수 있을까?" 에 대해서 정리해야만 한다.
1. 어떻게 최대 상속 클래스를 찾을 수 있을까?
타입리스트 중에 최대 상속 클래스를 찾으려면, 타입리스트의 모든 요소를 비교 해야 한다. "모든 요소를 한번 훑기 위해선 타입리스트의 마지막 요소까지 "흐름"을 내려가게 한 뒤, 처음으로 나올때까지 비교 하는 방법" 밖에 없다.
비교라는 것은 두개를 비교 한다는 것이다. 동시에 3개를 비교하는 방법은 존재하지 않는다. 이는 실 생활에서도 마찬가지다. 크기가 다른 3개의 물건을 크기 비교 하여, 제일 큰 물건을 찾고자 한다면, 먼저 아무거나 한 개를 고룬 후, 다른 것과 비교 할 수 밖에 없으며, 모든 것을 비교 할 때까지 계속 비교 해야 한다.
그런므로, 최대 상속 타입을 찾는 함수는 두개의 인자를 받아 서로 비교하여, 상속을 가장 많이 받은 녀석을 벹어 내야 할 것이다.
2. 이 함수는 어떤 프로시저를 갖추어야 하나?
비교 해야 하므로, 다음과 같은 프로시저를 갖추어야 한다.
일전에 SUPERSUBCLASS 라는 함수를 만들었다. 이 방법에 대해서는 링크로 대체 한다.
참조 링크
- http://ikpil.com/1032
4. 어떻게 제일 큰 것을 찾을 수 있을까?
- 모든 요소 중 하나를 고른다. 이를 A 라고 한다.
- 다른 요소를 고르며, 이를 B 라고 한다. 이때 한번도 비교 당하지 않는 요소를 골라야 한다.
- A 와 B 중 더 큰 것을 A에 저장한다.
- 2단계 부터 모든 요소를 비교 할 때까지 반복한다.
- 더 이상 비교 할 것이 없을 때, A가 제일 큰 것이다.
5. 어떻게 타입 리스트의 끝까지 흐름을 내려 갔다가 올라 갈 수 있을까?
타입리스트의 끝이 NullType 이므로, NullType을 만날 때까지 내려 갈 수 있다. 올라 오는건 재귀 함수이므로, 마지막 함수까지 도달 하고, 모든 연산이 끝났을 때, 스택 되감기 처럼, 위로 올라 온다.
그러므로 다음 처럼 만들어야 할 것이다.
6. 실제 코드
3, 4, 5 를 종합하면 다음 코드 처럼 만들어야 한다.
7. 1부와 결합된 코드
Digression
- 1은 나, 2는 너, 3은 나도 아니고 너도 아닌 것, 3이란 숫자는 1과 2와 처럼 콕 찝을 수 없는 것을 가리킨다고 생각한다.
- 이 포스트에서 말하는 함수는 템플릿 메타프로그래밍 함수를 뜻한다. 즉 class나 struct를 말한다.
- 직관력을 표현할 수 있는 방법이 필요하다..
- 유클리드는 참 대단한 녀석이다. 어떻게 그것들을 다 정리 할 수 있었지? 사명감 같은게 있었나? 해야만 했었나?
- 만드는 기술은 익혔으나, 문서로 이 기술을 전달할 기술을 익히지 못했다. 이런 면에서 볼 때, 책 이란 존재는 참 대단하다. : )
'책 정리 > Modern C++ Design' 카테고리의 다른 글
4장, 작은 객체에 대한 메모리 할당 - 3 : 메모리 풀에서 할당 기능을 어떻게 만들 것인가? (0) | 2010.09.25 |
---|---|
4장, 작은 객체에 대한 메모리 할당 - 2 : 어떻게 메모리풀을 만들어야 하는가? (722) | 2010.03.28 |
4장, 작은 객체에 대한 메모리 할당 - 1 : 메모리 풀은 무엇이며, 왜 필요한가? (360) | 2010.03.19 |
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 1부 (360) | 2010.03.08 |
Part 3, 테크닉 3-11 Typelist의 한 원소를 다른 자료형으로 바꾸기 (359) | 2009.09.04 |
Part 3, 테크닉 3-10 중복 자료형의 삭제 (0) | 2009.09.01 |
Part 3, 테크닉 3-9 typelist에서 특정 자료형 제거하기 (0) | 2009.09.01 |
Part 3, 테크닉 3-8 typelist에 자료형 또는 typelist 추가하기 (0) | 2009.09.01 |
최근댓글