Introduction 이번 3부에선 템플릿 파싱 규칙에 대해서 정리하고 있다. 여기서 typename과 template 들을 사용 하는 방법과 using 사용시 주의 해야 할점, ADL로 인식 안되는 경우 등을 살펴 보고 있다. MSVC에선 일반적으로 간편하게 되는 경우가 있으나, 다른 컴파일러를 사용해야 한다면, 어느정도는 알고 있어야 된다. Content C++ 컴파일러가 C++을 파싱하는 방법 을 책에선 설명하는데, 좀 많이 생략되어서 인터넷으로 한글로 검색하다 나오지 않아 짦은 영어로 검색했다. 그리고 "dragon book"에 잘 나와 있다고 되어 있어서 검색해 보니 "http://en.wikipedia.org/wiki/index.html?curid=188976"이 있었다. 국내 번역서를 찾아..
책 정리/C++ Template 검색 결과
사설 티스토리 임시저장 본 으로 유지하고 있다가 다 날렸슴.. 내 3시간.. 절대쌍교의 가의신공이 생각나는군. 배운게 있다면, 독립적 구성으로 4단계로 구분짓고 저장하는 습관을 기르면 괜찮겠군. 이라고 생각 됨. 템플릿에서 이름을 평가하는 규칙이 왜 중요한가? 가뜩이나 C++에서 이름을 평가하는 방법이 어렵다. 그래서 템플릿까지 끼면 더 어렵다. 어려운 것을 모르고 지나가면, 큰코 다친다. 그래서 중요하다. 만약 C/C++을 공부한 사람이라면, "이게 왜 어려운데?" 라고 반문할 수 있다. 상대적으로 어려운 것이니 그러려니 하자.(운동하고 있는 문체가 운동하고 있는지를 관찰하려면, 다른 운동을 하는 물체와 비교 할 수 밖에 없는 이치와 같다. - 아인슈타인) 템플릿에서 이름을 평가하는 규칙을 알기 전에,..
프렌드(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..
템플릿 인자는 템플릿이 인스터스화 될 때, 그 파라미터의 값을 말한다. 이 템플릿 인자는 다음 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]..
최근댓글