만약 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; 자 어떤가? .. 아 귀찮아서 못써먹겠다고? 그렇다. 그래서 ..
책 정리/Modern C++ Design 검색 결과
이번 테크닉은 Typelist에 들어 있는 찾고자하는 자료타입이 몇번 인덱스에 존재하는지 찾기 위한 테크닉이다. 만약 원하는 결과가 있다면, 그 인덱스를, 원하는 결과가 없다면 -1을 리턴하면 좋을듯 싶다. 가지고 있는 정보를 토대로 로직을 구상해 보면 다음과 같다. 1. 탐색하는 흐름이 NullType까지 왔다면, 찾고자 하는 타입이 없는 것이므로, -1을 리턴한다. 2. 탐색하는 흐름이 원하는 타입을 typelist::Head 에서 찾았다면 0을 리턴한다. 이 탐색하는 흐름은 뒤에서 이야기 하고, 여기서 나열한 두개의 조건에 대해서만 생각해 보자. 찾지 못했을 때, 어떤 값을 리턴해야 하지? 나는 처음에 이 생각을 했었다. 검색하지 못했을 때, 아무값으로 해도 되지 않을까? 라고 자문해 보았을 때, ..
이런 생각을 한 이유는 재귀 알고리즘이 이해하기 어렵기 때문이다. 막상 벽에 부딪치면, 왜 벽이 존재 하는 걸까? 란 경우와 같다. 재귀 알고리즘 없이 한번 시도해 보려고 했지만, 도저히 모르겠다. 책을 보니, 이러한 정리글이 있었다. "컴파일 타임에 값을 저장 할 수 있는 공간이 없기 때문"이라고 정리 되어 있었다. 나중에 이런 것들을 추가 된다면, 더할 나위 없겠지만, 현재로썬 "템플릿 부분 특수화를 if 문처럼, typedef를 함수의 반환값 처럼, enum을 변수 처럼, 재귀 알고리즘을 처리 연산 처럼" 사용하여, 원하는 결과를 만들 수 밖에 없다. 그러므로, 이러한 테크닉들을 친숙하게 받아들여야만 한다.
3.4는 typelist에 대한 길이 계산에 대해서 설명하는 항목인데, 3.3의 다음으로 보기엔 좀 난해하다. 길이에 대한 설명은 접근성 다음이 되야 좋지 않을까 한다. 그러므로 접근성에 대해서 먼저 정리한 뒤, 길이에 대해서 정리하겠다. 아직 손쉬운 접근방법이 없으므로, 손쉬운 접근방법에 대해서 생각해보자. int 타입을 갖는 값이 나와라. 라고 사용법을 정하면 다음과 같이 정의 할 수 있을 것이다. TYPELIST_3(int, char, int) d3 get( d3 ) = 3; 참으로 간단하면서 사용하기 편하다. 하지만 첫번째 int의 값인지 세번째 int의 값인지 알 길이 없다. 그러므로 이 방법은 사용 할 수 없다. 다시 원점으로 돌아와서 생각을 해보니, 숫자로 지정하면 모호해질 일이 없을 것이라..
typelist가 .. 확실히 당근 농장의 트렉터같은 존재라 할일지라도 트렉터를 몰기 어렵다면, 누구도 트렉터를 사용하지 않을 것이다. 그렇기 때문에 사용법을 확실히 고쳐놔야 하는데 책에선 #define 매크로를 이용하여 개선시켰고, boost::tuple의 경우 메타 프로그래밍으로 개선시켰다. 나 같은 경우 boost::tuple이 더 마음에 들지만 실질적으로 책에서 설명하는 typelist는 더 확장된 개념이기도 하고, 9장에서 추상 팩토리도 해야 하니, 책의 방법을 고수하겠다. 우선 문제점으로 꼽혔던 사용 방법 중, 선언 방법을 고쳐 보기 위해서 생각을 해보자. 음!! OK! 책에서 #define 매크로를 이용하여 typelist의 선언 방법을 개선 시켰는데, 그 방법이 바로 "재귀 호출"이다. 사..
최근댓글