지금까지 정리했던 내용 중에서 나왔던 용어들을 다시 한번 정리 하는 장이라고 보면 된다.
클래스 템플릿? 템플릿 클래스? 뭐가 맞는거야?
맞는다라는 개념은 아닐 것이다. 저자의 뜻을 정리하자면, "괜시리 헷갈리기만 하니까 나는 클래스 템플릿만 쓰겠다. 갖은 맥락으로 함수 템플릿 이라고 지칭 하겠다" 이다. .. 멋진 녀석. ㅋㅋ
인스턴스화? 특수화?
템플릿의 인자를 실제 값으로 인식해 클래스나 함수를 생성하는 과정을 "템플릿 인스턴스화"라고 한다.
이 템플릿 인스턴스화롸 나온 결과를 "특수화" 라고 한다. .. 어?? 이게 무슨 말이래. 특수화는 내가 특별히 템플릿 코드를 정의해 주는걸 말하는게 아닌가? 라고 생각하는 찰나에 "이미 코드가 만들어 졌으니 템플릿 입장에선 특수화가 맞군" 이다.
그래서 프로그래머가 명시적으로 특수화 한 템플릿을 "명시적 특수화" 라고 하는게 더 정확하다.
선언과 정의
선언은 "이런게 있다~" 라고 알리는 것이다. 현재 우리 나라에서 이명박 정권에 대하여 "시국선언"을 하는것을 볼 수 있는데, 구체적인 해결방법은 아니고, 현재 문제가 있으니 좀 알아달라. 이다. 즉, 선언은 "이런게 있다는걸 좀 알아줘~" 이다.
정의는 "이런게 있다는걸 알아줘"를 받아드리어 "이렇게 저렇게 요렇게 그렇게 하자"라고 정하는 것이다.
C++ 에선 선언과 동시에 정의도 할 수 있다. 예를 들어
int i = 0; 같은 구문들이다. int i(0); .. 이것도 뭐 같은 것이다.
클래스 템플릿, 함수 템플릿의 선언이 본체도 있다는 선언과 동시에 정의인 것이다.
단일 정의 법칙 : 단정의 법칙
C++ 에선 단일 정의 법칙:one definition rule:ODR 제약이 있다. 이 제약은 정의는 단 1개여야 한다는 것이다. 세부적으론 다음의 룰이 있다.
* 일반 함수, 멤버 함수, 전역 변수, 정적 데이터 멤버 는 단 한번만 정의 되어야 한다.
* 클래스형과 인라인 함수는 한 번역단위마다 1개씩 정의 할 수 있다.
번역 단위??
번역 단위란 컴파일러가 파일내의 코드의 #include를 포함한 처음부터 끝까지 읽었을 때, 그 영역을 번역 단위라고 한다.
템플릿 인자, 템플릿 파라미터!?
인자는 값이고, 파라미터는 타입이다. 예를 들어 int f(int i) 라는 함수가 있을 때, f(1) 에서 1은 인자다. 그리고 i는 파라미터이다. 그러므로 템플릿 인자는 템플릿 파라미터에 들어오는 값을 지칭한는 것이다. .. 음.. 밑에 각주로 "학술적으론 인자는 실제 파라미터이고, 파라미터는 형식적 파라미터이다"라고 정리해 준다.
아차, 템플릿 코드에선 템플릿 인자를 다른 템플릿의 파라미터에 넣어서 사용 할 수도 있다. .. 이렇게 정리하니까 잘 모르겠네,
요렇게 말이 이다. ^^
이로써 1부 정리가 끝났다. 기초를 다지기에 충분한 내용이였다고 생각 한다.
'책 정리 > C++ Template' 카테고리의 다른 글
8장, Part 3, 템플릿 인자 - 템플릿 인자의 다양한 설정 방법 (0) | 2009.07.25 |
---|---|
8장, Part 2, 템플릿의 기초 원리의 깊은 이해 - 템플릿 파라미터 (0) | 2009.07.25 |
8장, Part 1-2, 템플릿의 기초 원리의 깊은 이해 : 재미없는 템플릿의 링크 (0) | 2009.07.12 |
8장, Part 1-1, 예외적인 가상 멤버 함수 (0) | 2009.07.12 |
8장, 템플릿의 기초 원리의 깊은 이해 (360) | 2009.07.12 |
6장, 템플릿 실제 사용 : 디버깅 템플릿 (0) | 2009.07.05 |
6장, 템플릿 실제 사용 : 미리 컴파일된 헤더 (0) | 2009.07.03 |
6장, 템플릿 실제 사용 : 템플릿과 인라인 (358) | 2009.06.29 |
6장, 템플릿 실제 사용 : 템플릿 코드 파일 관리법 (720) | 2009.06.29 |
템플릿의 고급기능, 2부 (0) | 2009.05.31 |
최근댓글