템플릿 코드를 쓰다 보면 템플릿 파라미터인 T가 어떤 특성을 가지고 있는지 알아야 할 때가 있다. 예를 들자면, swap 을 하려 할 때, POD 형이라면, memcpy 를 이용하여 복사 하고 아닌 경우라면, 생성자 호출에 의한 값 복사를 진행하면 꽤 좋은 성능을 낼 수 있기 때문이다. 이번 장에선 템플릿 파라미터인 T의 특성을 컴파일 타임에 확인하는 테크닉에 대해서 설명한다. 이러한 테크닉의 설명에 앞서 이미 만들어진 라이브러리(Boost.TypeTraits)도 있다는 것을 미리 밝힌다. 2.10.1 포인터 Traits의 구현 쉽게 말해서 포인터 형인지 확인하는 테크닉이다. 코드를 보면 한번에 알 수 있을 테니 코드를 적어 둔다. // 책의 소스를 조금 손 보았다. ikpil #include #incl..
2009/07 검색 결과
프렌드(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]..
type_info 는 타입의 정보를 저장하는 클래스이다. type_info 란 클래스는 typeid라는 연산자를 통하여, 생성되고, 그 참조값이 반환 된다. type_info 에 대한 설명은 일전에 정리하였던 문서(http://ikpil.com/685)를 보자. .. 설명에서 나와 있듯이, 실제로 써서 알 수 있듯이 사용하기 좀 힘든 클래스 이다. 그래서 안드레 알렉산드 레스큐는 좀 더 type_info를 쉽게 사용하고자, 다음의 개념을 정리하였다. 복사 생성자와 기본 생성자가 없어, 컨테이너등에 넣을 수 없으니, 만들어야만 한다. 첫번째에 의해서 포장되었으니, 다른 비교 연산자 등을 재정의해야만 한다. .. 개념을 알았으니, 각자 만들어 보자.( 책에 소스 코드도 역시 .. 선언만 되어 있다. ) 나는..
최근댓글