Purpose-built post

1부를 끝내기 위해서 만들었다.

Content

1부에서 만들어진 DerivedToFront 함수(함수라 칭하는게 옳다.)는 최대 상속 클래스를 찾았다. 라는 전제에서 만들어진 함수이다. 그러므로, 이제 "어떻게 최대 상속 클래스를 찾을 수 있을까?" 에 대해서 정리해야만 한다.

1. 어떻게 최대 상속 클래스를 찾을 수 있을까?

타입리스트 중에 최대 상속 클래스를 찾으려면, 타입리스트의 모든 요소를 비교 해야 한다. "모든 요소를 한번 훑기 위해선 타입리스트의 마지막 요소까지 "흐름"을 내려가게 한 뒤, 처음으로 나올때까지 비교 하는 방법" 밖에 없다.

비교라는 것은 두개를 비교 한다는 것이다. 동시에 3개를 비교하는 방법은 존재하지 않는다. 이는 실 생활에서도 마찬가지다. 크기가 다른 3개의 물건을 크기 비교 하여, 제일 큰 물건을 찾고자 한다면, 먼저 아무거나 한 개를 고룬 후, 다른 것과 비교 할 수 밖에 없으며, 모든 것을 비교 할 때까지 계속 비교 해야 한다.

그런므로, 최대 상속 타입을 찾는 함수는 두개의 인자를 받아 서로 비교하여, 상속을 가장 많이 받은 녀석을 벹어 내야 할 것이다.

2. 이 함수는 어떤 프로시저를 갖추어야 하나?

비교 해야 하므로, 다음과 같은 프로시저를 갖추어야 한다.


3. 어떻게 두개 중 한개가 나머지 한개를 상속했는지 비교 할 수 있을까?

일전에 SUPERSUBCLASS 라는 함수를 만들었다. 이 방법에 대해서는 링크로 대체 한다.

참조 링크

  • http://ikpil.com/1032

4. 어떻게 제일 큰 것을 찾을 수 있을까?

  1. 모든 요소 중 하나를 고른다. 이를 A 라고 한다.
  2. 다른 요소를 고르며, 이를 B 라고 한다. 이때 한번도 비교 당하지 않는 요소를 골라야 한다.
  3. A 와 B 중 더 큰 것을 A에 저장한다.
  4. 2단계 부터 모든 요소를 비교 할 때까지 반복한다.
  5. 더 이상 비교 할 것이 없을 때, A가 제일 큰 것이다.

5. 어떻게 타입 리스트의 끝까지 흐름을 내려 갔다가 올라 갈 수 있을까?

타입리스트의 끝이 NullType 이므로, NullType을 만날 때까지 내려 갈 수 있다. 올라 오는건 재귀 함수이므로, 마지막 함수까지 도달 하고, 모든 연산이 끝났을 때, 스택 되감기 처럼, 위로 올라 온다.

그러므로 다음 처럼 만들어야 할 것이다.

6. 실제 코드

3, 4, 5 를 종합하면 다음 코드 처럼 만들어야 한다.


7. 1부와 결합된 코드


Digression

  • 1은 나, 2는 너, 3은 나도 아니고 너도 아닌 것, 3이란 숫자는 1과 2와 처럼 콕 찝을 수 없는 것을 가리킨다고 생각한다.

  • 이 포스트에서 말하는 함수는 템플릿 메타프로그래밍 함수를 뜻한다. 즉 class나 struct를 말한다.
  • 직관력을 표현할 수 있는 방법이 필요하다..
  • 유클리드는 참 대단한 녀석이다. 어떻게 그것들을 다 정리 할 수 있었지? 사명감 같은게 있었나? 해야만 했었나?

  • 만드는 기술은 익혔으나, 문서로 이 기술을 전달할 기술을 익히지 못했다. 이런 면에서 볼 때, 책 이란 존재는 참 대단하다. : )



  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기