책에선 Typelists가 무엇인지 초반에 설명해 주지 않는다. 그래서 3장을 끝까지 봤다. boost::tuple 과 비슷하다는 생각을 많이 했다. 책에서 설명하는 Typelist는 좀 더 응용 될 수 있다. 3장 도입부의 내용이 아리송 했었다. 그 이유는 도입부는 추상 팩토리 개념을 일반화 하는데 Typelists가 필요하다고 설명하고 Typelists 설명부에서는 boost::tuple과 비슷한 개념을 설명하기 때문이다. 추상 팩토리 개념의 일반화는 9장에서 설명한다고 하니, 책의 구성이 크게 잘못되었다고 생각하지 않는다. 나는 정리를 위하여 Typelists의 필요성에 대해서만 책과 내용을 크게 달리 하겠다. 3.1 Typelists 의 필요성 코딩을 하다보면, 가끔씩 두개 이상의 자료형을 묶어서..
IT 검색 결과
템플릿 코드를 쓰다 보면 템플릿 파라미터인 T가 어떤 특성을 가지고 있는지 알아야 할 때가 있다. 예를 들자면, swap 을 하려 할 때, POD 형이라면, memcpy 를 이용하여 복사 하고 아닌 경우라면, 생성자 호출에 의한 값 복사를 진행하면 꽤 좋은 성능을 낼 수 있기 때문이다. 이번 장에선 템플릿 파라미터인 T의 특성을 컴파일 타임에 확인하는 테크닉에 대해서 설명한다. 이러한 테크닉의 설명에 앞서 이미 만들어진 라이브러리(Boost.TypeTraits)도 있다는 것을 미리 밝힌다. 2.10.1 포인터 Traits의 구현 쉽게 말해서 포인터 형인지 확인하는 테크닉이다. 코드를 보면 한번에 알 수 있을 테니 코드를 적어 둔다. // 책의 소스를 조금 손 보았다. ikpil #include #incl..
프렌드(friend)는 접근을 허락해 주는 키워드 이다. 이 프렌드(friend)선언의 특징 중 다음 두가지 이유 때문에 템플릿과 섞이면서 좀 복잡해 진다. 프렌드(friend)는 프렌드로 적용할 타입이 있을 때만 선언 할 수 있다. 프렌드(friend) 함수 선언이 함수의 정의가 될 수 있다. 프렌드 클래스 선언은 정의가 될 수 없으므로 걱정할 것이 없다. 1번에 의해서 다음 문법들만 성립 된다. template class Node; template class Tree { friend class Factory; friend class Node; friend class T; // error friend T; // error }; class ErrorTest { }; int main( void ) { Tr..
NullType .. 아니 이게 모지? 라고 생각을 했었다. 10개월 전 쯤에.. 처음 이것의 가치를 본 것은 boost::tuple이였다. 템플릿이 코드를 생성한다고 하나, 템플릿 파라미터를 가변으로 만들어주지는 못하고 있다.(나중에 한다는 말을 들은 것 같은데?) tuple 을 보면 총 10개까지(까지가 중요한거다 까지!) 타입을 받아 하나의 자료형으로 묶을 수가 있다. 만약 10개가 안되는 타입, 예를 들어 2개의 타입만을 묶을 때는 나머지 8개의 타입을 NullType으로 묶는다. 음.. 실제로 boost::tuple의 생성자 쪽을 보면, 헉! 이건 뭐지? 라고 할텐데. 보면 자연스럽게 직감할 수 있을 것이라고 생각한다. 크... 다시 정리 하지만 NullType은 "난 타입이 아니야. 임마!" ..
템플릿 인자는 템플릿이 인스터스화 될 때, 그 파라미터의 값을 말한다. 이 템플릿 인자는 다음 4가지 방식에 의해서 결정 될 수 있다. 1. 명시적 지정에 의한 결정 template class ClassTemplate { public: typedef T TemplateParameter; }; int main( void ) { // 명시적 템플릿 인자 int ClassTemplate testObj; return 0; } 이렇게 명시적으로 말한것을 뜻한다. 2. 삽입된 클래스 이름에 의한 결정 template class ClassTemplate { public: // ClassTemplate 범위에서 ClassTemplate 이란 이름은 // 자동적으로 인스턴스화될 때의 인자를 부여 받는다. // 그러므로 ..
8.2에선 템플릿 파라미터의 종류와 예외적 상황에 대해서 설명하고 있다. 템플릿 파라미터로는 다음 3가지가 올 수 있다. 1. 데이터형 파라미터 2. 데이터형이 아닌 파라미터 3. 템플릿 템플릿 파라미터 각 종류의 예외적 상황을 알아 보자. 8.2.1 데이터형 파라미터의 예외적 사항 데이터형 파라미터 T가 있다면 마치 typedef T 와 동일하게 컴파일러는 인식한다. 그래서 다음 코드는 에러가 날 것이다. template class List { class Allocator * allocator; friend class Allocator; }; int main( void ) { return 0; } 컴파일러 에러를 통해 어떻게 에러가 났는지 알아 보자. g++43 [ikpil@localhost work]..
최근댓글