이런 생각을 한 이유는 재귀 알고리즘이 이해하기 어렵기 때문이다. 막상 벽에 부딪치면, 왜 벽이 존재 하는 걸까? 란 경우와 같다. 재귀 알고리즘 없이 한번 시도해 보려고 했지만, 도저히 모르겠다. 책을 보니, 이러한 정리글이 있었다. "컴파일 타임에 값을 저장 할 수 있는 공간이 없기 때문"이라고 정리 되어 있었다. 나중에 이런 것들을 추가 된다면, 더할 나위 없겠지만, 현재로썬 "템플릿 부분 특수화를 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의 선언 방법을 개선 시켰는데, 그 방법이 바로 "재귀 호출"이다. 사..
3.1 에서 필요성에 대해서 이야기했고, 어떻게 사용하면 좋은지도 이야기 했었다. 하지만 그 사용법은 현재의 템플릿으로는 정의 할 수가 없다. 왜냐하면 템플릿은 가변 템플릿 파라미터란 개념이 없고, 고정된 템플릿 파라미터를 요구하기 때문이다. 그렇기 때문에 템플릿이 아니라 템플릿 메타 프로그래밍을 하여, 가변 템플릿 파라미터를 받을 수 있도록 만들어야 한다. 문제는 어떻게 인데, ... 생각하기 어렵다면 이미 만들어져 있는 boost::tuple을 사용해도 좋을 듯 싶다. 하지만 어떻게를 알고 싶다면, 책을 몇번이라도 읽기를 바란다. 그렇다면, 지금부터 "어떻게" 정의 할 수 있는지 알아보자. 우선 사용법 3.1에서 표기했다. 다시 옮기자. typedef typelist type2pack; typedef..
책에선 Typelists가 무엇인지 초반에 설명해 주지 않는다. 그래서 3장을 끝까지 봤다. boost::tuple 과 비슷하다는 생각을 많이 했다. 책에서 설명하는 Typelist는 좀 더 응용 될 수 있다. 3장 도입부의 내용이 아리송 했었다. 그 이유는 도입부는 추상 팩토리 개념을 일반화 하는데 Typelists가 필요하다고 설명하고 Typelists 설명부에서는 boost::tuple과 비슷한 개념을 설명하기 때문이다. 추상 팩토리 개념의 일반화는 9장에서 설명한다고 하니, 책의 구성이 크게 잘못되었다고 생각하지 않는다. 나는 정리를 위하여 Typelists의 필요성에 대해서만 책과 내용을 크게 달리 하겠다. 3.1 Typelists 의 필요성 코딩을 하다보면, 가끔씩 두개 이상의 자료형을 묶어서..
템플릿 코드를 쓰다 보면 템플릿 파라미터인 T가 어떤 특성을 가지고 있는지 알아야 할 때가 있다. 예를 들자면, swap 을 하려 할 때, POD 형이라면, memcpy 를 이용하여 복사 하고 아닌 경우라면, 생성자 호출에 의한 값 복사를 진행하면 꽤 좋은 성능을 낼 수 있기 때문이다. 이번 장에선 템플릿 파라미터인 T의 특성을 컴파일 타임에 확인하는 테크닉에 대해서 설명한다. 이러한 테크닉의 설명에 앞서 이미 만들어진 라이브러리(Boost.TypeTraits)도 있다는 것을 미리 밝힌다. 2.10.1 포인터 Traits의 구현 쉽게 말해서 포인터 형인지 확인하는 테크닉이다. 코드를 보면 한번에 알 수 있을 테니 코드를 적어 둔다. // 책의 소스를 조금 손 보았다. ikpil #include #incl..
최근댓글