Introduction C++ 컴파일러가 템플릿을 인스턴스화 하는 규칙을 설명하고 있다. 이 규칙은 무척 많은 세부사항으로 이루어져 있다. 각 세부사항들을 알아 본다. Content 1. 템플릿은 두 단계 룩업을 한다. 템플릿 코드는 템플릿을 파싱 할 때, 1차 룩업을 하고, 인스턴스화가 될 때 2차 룩업을 하여, 이름을 찾는다. 1차 룩업을 할 땐, 일반적인 룩업(영역에서 이름 찾기)과 ADL(인자 이름으로 이름 영역 끌고 오기)를 한다. 2차 룩업을 할 땐, 종속된 이름에서 룩업을 하고, 한정되지 않은 이름을 위해서 ADL이 추가로 수행 된다. .. 이 말의 무슨 말이고 하면, 코드를 보자. // ikpil.com class NoTempalte { int notemplate_field; // 1 };..
분류 전체보기 검색 결과
Introduction 1부에선 "주문형 인스턴스화"를 통해, 언제 인스턴스화가 필요한지 알게 되었다면, 게이른 인스턴화 부분에선 좀 더 세부적으로 인스턴스화 되는 시기를 정리한다. 여기서 말하는 세부적이란, 기존에선 인스턴스화 자체에 대해서 이야기 했다면, 이 부분은 템플릿 코드의 내부 요소, 즉 클래스 템플릿의 멤버들이 언제 인스턴스화 되는지 정리 되었다는 것을 의미한다. Content 게으른 인스턴스화 코드를 보고 규칙을 파악하는게 더 빠르므로, 예제코드(책에서 발취)를 첨부하고 하나씩 정리해 보겠다. template class Safe { }; template class Danger { public: typedef char Block[N]; }; template class Tricky { publ..
Introduction 이번 장은 템플릿이 언제 어떻게 실체화 되는지에 대해서 정리한 것이다. 이것을 알아야 하는 이유는 "템플릿의 가시화가 되지 않았기 때문에 컴파일이 되지 않는다" 라는 직관을 길르기 위해서이다. 총 5 파트의 정리가 있는데, 이번 파트에선 "주문형 인스턴스화" 만을 정리 한다. Content 주문형 인스턴스화 우선 "인스턴스화 : instantiation" 이 어떤 단어인지 정의 해야 한다. 이 것은 실체화 라고 이해 하면 된다. C++ Template 에선 템플릿 코드가 실체화 되는 것을 인스턴스화 : instantiation 라고 한다. 여기서 말하는 주문형은, 프로그래머가 요구한 주문에 대해서 인스턴스화 되는 것을 뜻한다. - 원어가 어떻게 되어 있는지는 못찾겠다. : | 쉽게..
Introduction 클래스 템플릿이 다른 클래스 템플릿을 상속 할 경우, 무엇을 주의 하라는지 설명 하고 있다. 클래스 템플릿을 상속 하고 잘못 사용 했을 경우, "가상 함수"가 제 역활을 못할 수 있거나, 컴파일 자체가 되지 않을 수 있으므로, 이 부분은 꼭 봐야 할 것이다. Content 시작하기에 앞서, 한가지 사실을 미리 알아두어야 한다. 바로 기반이 되는 클래스 템플릿이 파생 되는 클래스 템플릿에 기입 된 파라미터에 종속 될 경우와 종속되지 않을 경우, 이름을 찾는 규칙이 변화 한다는 사실이다. 이 두 경우 중 종속되지 않을 경우(기반 클래스 템플릿이 파생 클래스 템플릿에 기입된 템플릿 파라미터에)가 더 적은 규칙을 가지고 있으므로, 이를 먼저 정리하겠다. 1. 종속되지 않은 기반 클래스일 ..
Introduction 이번 3부에선 템플릿 파싱 규칙에 대해서 정리하고 있다. 여기서 typename과 template 들을 사용 하는 방법과 using 사용시 주의 해야 할점, ADL로 인식 안되는 경우 등을 살펴 보고 있다. MSVC에선 일반적으로 간편하게 되는 경우가 있으나, 다른 컴파일러를 사용해야 한다면, 어느정도는 알고 있어야 된다. Content C++ 컴파일러가 C++을 파싱하는 방법 을 책에선 설명하는데, 좀 많이 생략되어서 인터넷으로 한글로 검색하다 나오지 않아 짦은 영어로 검색했다. 그리고 "dragon book"에 잘 나와 있다고 되어 있어서 검색해 보니 "http://en.wikipedia.org/wiki/index.html?curid=188976"이 있었다. 국내 번역서를 찾아..
최근댓글