본문 바로가기

책 정리/C++ Template Metaprogramming

(7)
CPPTM : 2 장 실습과제 : (Chapter 2 : Answers ) 아무리 찾아도 해설을 못찾았다. .. 암담한 현실앞에 놓여 있다. .. 다 풀어 봐야 하는데, 누구와 비교하면서 공부 해야 하는가...? 난 천재가 아니란 말이다.. 내가 해본 풀이, 추상적 태클과 상상속 태클까지 모두 환영 .. 잘못 된게 있으면 지적해 주세요 2-0. T가 참조 형식이면 T를 그렇지 않으면 const T&를 돌려주는 단항 메타함수 add_const_ref를 작성하라, 그리고 실험할 수 있는 프로그램도 작성하라 (boost::is_same 을 사용 할 수 있다) #include #include // 전방 선언 template class add_const_ref_impl; // 사용되는 메타 함수 : add_const_ref template class add_const_ref { publ..
CPPTM : 메타 프로그래밍에서 쓰이는 기초 용어 모두 정리 특수화(specializtion) : C++ Template 특수화를 뜻하며, 이 특수화는 메타프로그래밍의 분기(if 문 같은 거)로 많이 쓰인다. 기본 템플릿(primary template) : 일반 C++ Template 을 뜻한다. 인스턴스화(instantiation) : 진짜로 깨어난 코드를 말한다. 컴파일러는 깨어난 코드만 문법 검사 등을 처리 한다. 평소의 템플릿 코드는 잠자는 코드이지만, 그 잠자는 코드를 그냥 사용 했을 때, 컴파일러는 템플릿 코드를 깨워주고, 문법 검사도 해준다. 즉, 인스턴스화는 "깨어난 코드" 로 봐도 무방하다. 블로브(blob) : 클래스가 멤버함수나 멤버 값들을 가지고 있을 때, 블로브 라고 한다. 메타 자료(metadata) : C++ Template 에서 매개변..
CPPTM : Boost Type Traits 이란 무엇인가? Type Traits을 알기 위해, 기본적으로 알아야 하는 것은 무엇인가? 첫 번째, 모든 메타 함수들은 이름 공간 boost 안에 존재하고, #include 규칙을 따른다. 두 번째, 모든 수치 메타 함수들은 편의를 위해 메타 함수안에 ::value 를 제공하한다. 또한 bool을 하나의 정수 식으로 분류되고, bool을 사용 하는 메타함수나 모든 정수 값 메타함수들도 ::value 를 제공한다. 세 번째, 이 MPL이 제대로 동작하기 위해선, 비표준적인 컴파일러 지원을 요구하는 특질들이 있다. 예를 들면 has_trivail_destructor 등이 있겠다. 만약 "비표준적인 컴팡이러의 지원" 하지 않는 경우 MPL의 다른 기능으로 대체되어 사용 되어 질 수 있으니, 너무 걱정하지 않아도 된다. 네 ..
C++ Template Metaprogramming : CPPTM - cd backup CD Backup 을 해두었다. 매번, 책 사면, 시디 잊어 먹어서, .. 이번엔 아예 백업 떠서 올려 둔다. 잊어 먹어도 상관 없게 하기 위하여.. 신기한 것은, 7z 으로 압축하니 9메가 밖에 안나오는것, 이럴 거면, 차라리 시디값 빼고, 책 단가 낮추고, 인터넷으로 예제코드 뿌리면 더 효과적일 텐데.. 음~ 나름 이유가 있겠지.
CPTM을 하기 위해 필요한 것 : Type Traits Type Traits을 왜 알아야 하는가? C++ Template Metaprogramming 을 하기 위해서는 Template에서 사용 되는 변수들이 무엇인지 알아야 할 것이다. 알다시피 템플릿의 변수들은 타입과, 컴파일 타임에 확인 가능한 상수들이다. 즉, 이러한 변수들을 이용하여, 메타 프로그래밍을 하는 것이다. 이러한 변수들은 더하거나 빼거나, 비교하여, 특정 "연산"을 수행 할 수 있게 되는데, 그것을 "메타 프로그래밍" 이라 부를 수 있다. 이것은 말하는 더하거나 빼거나 등의 "기본 연산"이 있어야 된다는 전제이다. 메타 프로그래밍을 하기 위한 "기본연산"인 Boost 의 MPL 이다. 예를 들자면, "수"를 계산하기 위해선 "계산"이 필요하고, 이 계산의 기본인 "사칙연산"이 있다는 것을 들..
C++ 템플릿 메타프로그래밍 : C++ Template metaprogamming 개념 사냥하기 템플릿 메타 프로그래밍은 C++ 컴파일러가 컴파일 하기전에 코드를 읽고 그 코드에 들어간 메타 프로그래밍을 읽어 코드를 제어하여, 새로운(은 아니지만 이해상..) 코드를 만들어내어 생산성을 극대화 시키는 언어이다. 이런 템플릿 메타 프로그래밍은 표준 STL에 그 막강함을 자랑하며, Boost 의 강력함을 한층 더해주는 초강력 무기이다. 이 초강력 무기를 사용함에 있어, 이 무기는 프로그래밍 언어이라는 개념이 있어야 한다. 표준 STL 이나 Boost 를 사용했을 언어라는 느낌보다는 "그냥 쓰니까 되네" 라는 느낌이 더 강하기 때문에 이런 초기 개념을 "언어"라고 보는게 더 속편할지도 모르겠다. 언어를 알아감에 있어, 가장 처음에 하는것이 "printf("헬로우 월드형~");" 을 쳐보는것이 이 세상의 이..
C++ Template Metaprogramming : 메타 프로그래밍의 강력함에 맛들다. 프로그래머에게 있어 자료구조는 반드시 필요한 것이기에 자체적으로 링크드리스트를 만들어서 사용 하다가, C++로 처음 넘어가, 표준 STL 을 사용 하면서 그 강력함에 맛을 들게 되었다. 어줍잖은 실력으로 Boost 라이브러리를 사용하면서, 꼭 알고 넘어가야 겠다는 생각이 들어, 국내 번역서 책을 찾다가 물망에 오른 책이 C++ Template Metaprogramming Modern C++ Design 책이였다. Modern 은 너무 어려워서, 못보겠다는 말을 너무 많이 들어, C++ Template Metaprogramming 책을 구입하게 되었다. 번역은 류광씨가 했다. 류광씨 번역이 다소 이해하기 어려운 부분이 있지만, 번역되는 책 자체가 대부분 어려운 책이라 번역할 때 매우 힘들지 않았을까? 느낌..