만약 typelist에 자료형을 추가할 수 있다면 얼마나 좋을까? 왜 좋은지 모르겠다구?
음.. 내가 설명을 정리를 안한게 있나보다. 처음부터 다시 간다면 6개의 타입을 갖는 typelist를 정의 하기 위해선 매크로를 돌려서 typedef TYPELIST_6(float, int, double, unsigned long, long long, float) typelist6; 로 만들어야 할 것이다. 만들고 사용하다 보니, 동일한 타입에 int만을 추가하고 싶다.

자.. 그러면 어떻게 할까?
typedef TYPELIST_7(float, int, double, unsigned long, long long, float, int) typelist7; 자 어떤가? .. 아 귀찮아서 못써먹겠다고? 그렇다. 그래서 기존의 타입에 다른 타이을 붙일 수 있으면 좋겠다는 것이다.


어떻게 붙일까?
처음부터 차근히 생각해 보면 끝은 항상 NullType 이므로,
1. NullType 에 임의의 T를 붙일 경우, 원하는 결과는 typelist<T, NullType> 이 되야 한다.

그런데 만약 NullType을 붙이게 되면...? 윽 예외처리 해야겠다.
2. NullType 에 NullType을 붙일 경우, 원하는 결과는 NullType 이 되야 한다.

다시 1번으로 돌아가서 임의의 T가 typelist 일 경우, 뒤에 NullType을 붙이면 안된다. 이것도 예외처리
3. NullType 에 typelist을 붙일 경우, 원하는 결과는 붙이고자하는 typelist가 되야 한다.

만약 typelist에 NullType일 붙일 경우에는?
4. typelist에 NullType일 붙일 경우, 기존 typelist이 되야 한다.

진짜로 typelist에 임의의 T를 붙일 경우에는?
5. typelist의 Head 를 새로 만들 typelist의 Head에 두고, Tail 과 임의의 T를 결합한 typelist를 Taill로 둔 typelist가 되어야 한다.

이러한 시나리오를 기준으로 코드를 만들면 다음과 같다.

만들고 나서, 머리속에서 검증하는 동안에 5번에 의해서 4번은 필요없는 시나리오가 된다. 그러므로 불필요한 코드를 제거하자. 그러면 다음 코드가 되고, 검증할 수 있게 된다.

자 추가가 되었으니, 당연이 제거도 있어야 하지 않는가? 다음 3.9에선 제거 하는 것을 다루어 본다.

PS.
점점 Modern C++ Design 책을 이해하는게 좀 힘들어 진다고 해야 할까? 끝까지 읽을 수만 있다면 정말 좋겠다라는 생각이 든다.

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