프렌드(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를 쉽게 사용하고자, 다음의 개념을 정리하였다. 복사 생성자와 기본 생성자가 없어, 컨테이너등에 넣을 수 없으니, 만들어야만 한다. 첫번째에 의해서 포장되었으니, 다른 비교 연산자 등을 재정의해야만 한다. .. 개념을 알았으니, 각자 만들어 보자.( 책에 소스 코드도 역시 .. 선언만 되어 있다. ) 나는..
이 테크닉은 여러 책에서도 소개 되어 있다. 쉽게 말해서 "컴파일 타임 상속 여부 체크" 기능이다. 어떻게 형변환과 상속 가능 여부를 알 수 있는가? 일반적으로 사람의 눈으로 "형변환과 상속 가능 여부" 를 알기 위해선 해당 소스코드를 직접 보면 된다. 마찬가지로 컴파일러도 "볼수 있게" 만들어주면 되는데, 형변환 또는 상속 가능 여부 컴파일러가 "볼 수 있게"를 할려면, 몇가지 트릭이 필요하다. 결론은 알 수 있다는 것이다. 이 방법은 객체가 복사 될 수 있다면 컴파일러가 알아서 복사 하는 원리를 이용한 것이다. 하지만 이것을 일일이 컴파일 해보면서 알아 갈려면 정말 힘든 작업 이다. 그래서 여러 선구자들은 sizeof 트릭을 개발하였고, 이 트릭이 나오게 된다. 참고로 sizeof 연산자는 컴파일 타..
최근댓글