Purpose-built post
이 포스트는 "Modern C++ Design Chapter 3.13 Typelist를 통한 클래스 생성" 내용을 읽고 정리할 목적으로 만들어졌다. 2부 내용은 생성 후 각 타입 객체에 접근하는 방법에 대해서 정리한 것이다,
Content
현재 나는 책 내용과 다르게 진행하고 있다. 책에선 FieldHelper 를 함수로 구현하여, 원하는 요소에 접근을 한다. 나도 마찬가지로 함수 형태로 구현하려 했지만, 한가지 불편한 것이 있었다. 바로 함수는 템플릿 특수화가 되지 않는 점이였다. 나는 이 방법을 해결하기 위해 몇가지 생각을 했었다. (이것은 직관력으로 바로 생각해 낸 것이 아니라, 일전에 내가 고민하다가, 어떨결에 생각난 것이다.)
내가 제안하는 방법은 템플릿 특수화를 할 수 있게 struct 내에 static 함수를 만드는 것이다. 이는 멤버 함수가 템플릿 특수화에 영향을 받도록 해준다.
이제 보다 쉽게 접근하는 방법을 정리 해 본다.
우선 접근을 편하게 하기 위해서, 프로그래머가 사용 하는 형태를 우선 결정해야 할 것이다. 왜냐하면 최종 형태는 프로그래머의 사용 형태이기 때문이다. 나는 이렇게 생각하기에, 되도록 프로그래머의 사용 형태를 먼저 결정한다.
만약, 이 외의 방법으로 함수등 단위 실행 루틴을 만든다면, 댓글을 달아 주길 바란다.
1. 어떻게 프로그래머가 typelist에 접근하여, 각 요소를 사용 할 수 있는가?
곰곰히 생각해 보면, 타입으로 접근, 인덱스로 접근, 이 두가지 방법 밖에 없어 보인다. 우선 타입 접근을 생각해 보면, 이건 불가능 하다는 결론에 도달한다. 왜냐하면, typelist 내에 같은 타입이 있을 경우, 어떤 타입을 빼오라는 것인지 알 수 없기 때문이다.
예를 들자면, 형과 내가 둘이 집에 있는데, 어머니가 심부름을 시키기 위해 "최씨 한명 나와!" 라고 했을 때, 형과 나는 같은 최씨이므로, 서로 나가기 싫어해, 결국 아무도 안나가게 될 것이다. 만약 어머니가 "첫째 나와" 라고 한다면, 형은 찍소리 못하고 나가서 심부름을 해야 할 것이다.
이 예에서도 나와 있듯이 인덱스를 통한 접근 밖에 그 대안을 찾을 수 없다.
그러므로, 사용 형태는 Field<0>::get(객체) 처럼 쓸 수 있을 것이다.
2. 어떻게 Field<index>::get(객체)를 구현 할 것인가?
struct Field 를 만드는 것이야 어렵지 않다. 재귀호출 함수의 모든 리턴 타입을 어떻게 설정 할 것인가? 이다. 이러한 물음만 본다면, "무슨말 하는거지?" 라고 생각 할 것이다. 나도 리턴 타입을 신경 써야 한다는 것을 예상하지 않고, Field 를 구현 하는 중, 깨달았다.
바로 인덱스로 선택한 타입이 무엇인지 알아야, 함수 리턴타입을 정하여, 함수 정의를 만들 수 있다는 것이다.
그러므로 두가지가 필요하다 get 함수 상세 구현, 특정 인덱스로 typeliset 가 가진 요소 타입을 얻는 구현 이렇게 둘 말이다.
우선 급한 것이 리턴 타입을 결정 하는 것이므로, 먼저 만들어 본다. 이는 추가 설명이 필요 없다. 이 파트 3장을 보고 있노라면, 이건 잠자는 것 처럼 쉽다.
그 다음에, get 구현 부인데, 리턴 타입만 알면, 손쉽게 구현 할 수 있다. 다음 처럼
3. 모든 코드
Digression
- 가끔씩 내 생각데로만 쓸 때가 있는데, 바로 그게 이번 장 정리 이다.
- 이번장을 끝으로 3장을 마친다.
- 책의 typeliset에 공간을 할당하는 방식은 상속기반 비선형 계층 구조 이지만, 내 방식은 포함기반 선형 계층 구조이다. 1부에서 비선형에 대해서 정리했지만, 실제 코드는 선형이다. 개인적인 차이가 있듯이 상속기반은 코드를 보면, 잘 이해가 되지 않아, 되도록 내식데로 정리했다.
- 이 책만 보면, 2시간이고 시간이 막 가는데, 보고 나면 기진맥진하여, 아무것도 할 수 없는 상태가 된다.
'책 정리 > Modern C++ Design' 카테고리의 다른 글
4장, 작은 객체에 대한 메모리 할당 : 5 - 메모리 풀에서 할당 기능을 어떻게 만들 것인가? (0) | 2010.09.25 |
---|---|
4장, 작은 객체에 대한 메모리 할당 : 4 - 메모리 풀에서 할당 기능을 어떻게 만들 것인가? (1) | 2010.09.25 |
4장, 작은 객체에 대한 메모리 할당 - 3 : 메모리 풀에서 할당 기능을 어떻게 만들 것인가? (0) | 2010.09.25 |
4장, 작은 객체에 대한 메모리 할당 - 2 : 어떻게 메모리풀을 만들어야 하는가? (722) | 2010.03.28 |
4장, 작은 객체에 대한 메모리 할당 - 1 : 메모리 풀은 무엇이며, 왜 필요한가? (360) | 2010.03.19 |
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-10 중복 자료형의 삭제 (0) | 2009.09.01 |
최근댓글