본문 바로가기

템플릿 인스턴스화

(3)
10장 인스턴스화 3부 : Template 인스턴스화 규칙 Introduction C++ 컴파일러가 템플릿을 인스턴스화 하는 규칙을 설명하고 있다. 이 규칙은 무척 많은 세부사항으로 이루어져 있다. 각 세부사항들을 알아 본다. Content 1. 템플릿은 두 단계 룩업을 한다. 템플릿 코드는 템플릿을 파싱 할 때, 1차 룩업을 하고, 인스턴스화가 될 때 2차 룩업을 하여, 이름을 찾는다. 1차 룩업을 할 땐, 일반적인 룩업(영역에서 이름 찾기)과 ADL(인자 이름으로 이름 영역 끌고 오기)를 한다. 2차 룩업을 할 땐, 종속된 이름에서 룩업을 하고, 한정되지 않은 이름을 위해서 ADL이 추가로 수행 된다. .. 이 말의 무슨 말이고 하면, 코드를 보자. // ikpil.com class NoTempalte { int notemplate_field; // 1 };..
10장 인스턴스화 1부 : 주문형 인스턴스화 Introduction 이번 장은 템플릿이 언제 어떻게 실체화 되는지에 대해서 정리한 것이다. 이것을 알아야 하는 이유는 "템플릿의 가시화가 되지 않았기 때문에 컴파일이 되지 않는다" 라는 직관을 길르기 위해서이다. 총 5 파트의 정리가 있는데, 이번 파트에선 "주문형 인스턴스화" 만을 정리 한다. Content 주문형 인스턴스화 우선 "인스턴스화 : instantiation" 이 어떤 단어인지 정의 해야 한다. 이 것은 실체화 라고 이해 하면 된다. C++ Template 에선 템플릿 코드가 실체화 되는 것을 인스턴스화 : instantiation 라고 한다. 여기서 말하는 주문형은, 프로그래머가 요구한 주문에 대해서 인스턴스화 되는 것을 뜻한다. - 원어가 어떻게 되어 있는지는 못찾겠다. : | 쉽게..
C++ 템플릿 : 템플릿 인스턴스화 편 템플릿 정의하기에서 정의하는 방법을 정리했다. 정리 되는 도중에 한가지 의문점이 생기는데, 그 의문점은 "도데체 언제 템플릿들이 코드화가 이루어 지는 것일까?" 이다. 당연한 이야기 겠지만, 컴파일러에 의해서 링크가 되기 전에 이루어 질 것이지만, 정확한 시점을 모르면 약간 어리 둥절할 때가 있기 떄문이다. 이 어리둥절함은 컴파일 타임이라는게 전처리기 타임이라는 것도 있고 이진코드 생성 타임도 있고, 문법 검사 타임도 있고, .. 여러 타임이 나누어져 있기 때문에, 템플릿 인스턴스화의 시점에 따라서 템플릿 코드가 달라 질 수 있어, 어리 둥절 하게 된다. 그렇다면, "템플릿 인스턴스화" 란 무엇인가? 템플릿 매개변수에 인자를 넘겨서 클래스 선언을 만드는 과정을 "템플릿 인스턴스화" 라고 한다. 이런 인스..