3.1 에서 필요성에 대해서 이야기했고, 어떻게 사용하면 좋은지도 이야기 했었다. 하지만 그 사용법은 현재의 템플릿으로는 정의 할 수가 없다. 왜냐하면 템플릿은 가변 템플릿 파라미터란 개념이 없고, 고정된 템플릿 파라미터를 요구하기 때문이다. 그렇기 때문에 템플릿이 아니라 템플릿 메타 프로그래밍을 하여, 가변 템플릿 파라미터를 받을 수 있도록 만들어야 한다. 문제는 어떻게 인데, ... 생각하기 어렵다면 이미 만들어져 있는 boost::tuple을 사용해도 좋을 듯 싶다. 하지만 어떻게를 알고 싶다면, 책을 몇번이라도 읽기를 바란다. 그렇다면, 지금부터 "어떻게" 정의 할 수 있는지 알아보자. 우선 사용법 3.1에서 표기했다. 다시 옮기자. typedef typelist type2pack; typedef..
책 정리/Modern C++ Design 검색 결과
책에선 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..
NullType .. 아니 이게 모지? 라고 생각을 했었다. 10개월 전 쯤에.. 처음 이것의 가치를 본 것은 boost::tuple이였다. 템플릿이 코드를 생성한다고 하나, 템플릿 파라미터를 가변으로 만들어주지는 못하고 있다.(나중에 한다는 말을 들은 것 같은데?) tuple 을 보면 총 10개까지(까지가 중요한거다 까지!) 타입을 받아 하나의 자료형으로 묶을 수가 있다. 만약 10개가 안되는 타입, 예를 들어 2개의 타입만을 묶을 때는 나머지 8개의 타입을 NullType으로 묶는다. 음.. 실제로 boost::tuple의 생성자 쪽을 보면, 헉! 이건 뭐지? 라고 할텐데. 보면 자연스럽게 직감할 수 있을 것이라고 생각한다. 크... 다시 정리 하지만 NullType은 "난 타입이 아니야. 임마!" ..
type_info 는 타입의 정보를 저장하는 클래스이다. type_info 란 클래스는 typeid라는 연산자를 통하여, 생성되고, 그 참조값이 반환 된다. type_info 에 대한 설명은 일전에 정리하였던 문서(http://ikpil.com/685)를 보자. .. 설명에서 나와 있듯이, 실제로 써서 알 수 있듯이 사용하기 좀 힘든 클래스 이다. 그래서 안드레 알렉산드 레스큐는 좀 더 type_info를 쉽게 사용하고자, 다음의 개념을 정리하였다. 복사 생성자와 기본 생성자가 없어, 컨테이너등에 넣을 수 없으니, 만들어야만 한다. 첫번째에 의해서 포장되었으니, 다른 비교 연산자 등을 재정의해야만 한다. .. 개념을 알았으니, 각자 만들어 보자.( 책에 소스 코드도 역시 .. 선언만 되어 있다. ) 나는..
이 테크닉은 여러 책에서도 소개 되어 있다. 쉽게 말해서 "컴파일 타임 상속 여부 체크" 기능이다. 어떻게 형변환과 상속 가능 여부를 알 수 있는가? 일반적으로 사람의 눈으로 "형변환과 상속 가능 여부" 를 알기 위해선 해당 소스코드를 직접 보면 된다. 마찬가지로 컴파일러도 "볼수 있게" 만들어주면 되는데, 형변환 또는 상속 가능 여부 컴파일러가 "볼 수 있게"를 할려면, 몇가지 트릭이 필요하다. 결론은 알 수 있다는 것이다. 이 방법은 객체가 복사 될 수 있다면 컴파일러가 알아서 복사 하는 원리를 이용한 것이다. 하지만 이것을 일일이 컴파일 해보면서 알아 갈려면 정말 힘든 작업 이다. 그래서 여러 선구자들은 sizeof 트릭을 개발하였고, 이 트릭이 나오게 된다. 참고로 sizeof 연산자는 컴파일 타..
최근댓글