지금까지 정리했던 내용 중에서 나왔던 용어들을 다시 한번 정리 하는 장이라고 보면 된다. 클래스 템플릿? 템플릿 클래스? 뭐가 맞는거야? 맞는다라는 개념은 아닐 것이다. 저자의 뜻을 정리하자면, "괜시리 헷갈리기만 하니까 나는 클래스 템플릿만 쓰겠다. 갖은 맥락으로 함수 템플릿 이라고 지칭 하겠다" 이다. .. 멋진 녀석. ㅋㅋ 인스턴스화? 특수화? 템플릿의 인자를 실제 값으로 인식해 클래스나 함수를 생성하는 과정을 "템플릿 인스턴스화"라고 한다. 이 템플릿 인스턴스화롸 나온 결과를 "특수화" 라고 한다. .. 어?? 이게 무슨 말이래. 특수화는 내가 특별히 템플릿 코드를 정의해 주는걸 말하는게 아닌가? 라고 생각하는 찰나에 "이미 코드가 만들어 졌으니 템플릿 입장에선 특수화가 맞군" 이다. 그래서 프로..
IT 검색 결과
템플릿 코드는 디버깅 하기가 일반적인 코드보다 좀 더 까다롭다. 이 까다로움은 깊은 산속 옹달샘 만큼이나 찾기 어려운 문법 에러와 개념없이 작동되는 기능 때문에 생긴다. 깊은 산속 옹달샘 만큼이나 찾기 어려운 문법 에러 템플릿을 쓰다 보면, 템플릿 코드가 인스턴스가 되었을 때, 한편의 서정적이며 순수한 에러 메세지를 본 적이 있을 것이다. 기억을 더듬어 보니, 그런 에러가 다시 보고 싶다. 다음 코드를 컴파일 해 보자. #include #include bool order( std::list a, std::list b ) { return a.size() > b.size(); } int main( void ) { std::list d; d.push_back( 1 ); std::sort( d.begin(), ..
아니 왜 템플릿에서 미리 컴파일된 헤더 기법을 다루지? 라고 스스로 자문을 구해 보았었다. 처음에는 별 생각이 없었지만, 지속된 질문을 통해 한가지 사실을 알게 되었다. 템플릿 코드들은 대부분 "포함모델"로 코드를 관리 된다. 그러므로 모두다 헤더 파일 이란 뜻!!!!! 그렇다! 미리 헤더 파일을 컴파일 함으로써, 가뜩이나 템플릿 때문에 컴파일 타임 잡아 먹는다고 팀원들에게 눈치 보는데, 이참에 얍실스럽게 , "나 때문에 컴파일 타임 줄어들었잖아~" 라고 웃어 줄 수 있다는 것이다!!! 미리 컴파일된 헤더 기법이란 무엇인가? 헤더 파일을 미리 컴파일 해 두어, 컴파일 시간을 줄이는 기법이다. 이 기법은 표준이 아니므로, 컴파일러 제작자들마다 구현 방법 및 적용 방법이 다르다. 자세한 내용은 자신이 이용하..
인라인이 무엇인지 알기(exceptional C++ 에 무척 자세히 나온다: 항목 25 : inline 해부 http://www.ikpil.com/821)기 때문에 생략 한다. 템플릿의 특성상 번역단위마다 코드 인스턴스화가 일어 나지만, 동일한 인스턴스일 때는 단 1개의 정의로 컴파일러는 관리 한다. 그러므로 대부분의 컴파일러에서 "재정의 오류"가 일어나지 않는다. 일어 나는 컴파일러도 있다고 책에 적혀 있지만, 그건 프로그래머 잘못이 아니다. .. 그러므로 프로그래머는 당장 컴파일러를 바꾸어야 한다.(이건 책에 내용이 없다 : ) ) 하여튼, 번역단위마다 코드 인스턴스화가 일어 난다고 해서 자동으로 인라인이 된다고 착각 할 수 있다. 이 착각은 인라인과 동일하게 번역 단위마다 코드 붙이기가 일어 난다고..
템플릿 코드를 작성 하는 것은 , 일반 코드와 다르다. 이 다름에는 여러가지가 있지만, 컴파일러가 코드를 컴파일 하는 시점이 일반 코드와 다른 것이 이뜸이지 않을까 한다. 컴파일러는 어떻게 인식 하는가? 일반 코드의 경우 1. .h, hpp, hxx, 라는 파일에 선언을 넣어 둔다. 이런 파일을 우리는 헤더 파일이라 부른다. 2. cpp, c, cxx 파일에 정의를 넣어 둔다. 이런 파일을 우리는 C 파일이라 부른다. 이러한 헤더파일과 C파일을 컴파일러가 컴파일하게 되는데, 이러한 결과물을 OBJ 파일이라 한다. OBJ 파일은 단순한 기계어 파일인데, 이러한 OBJ 파일들을 링커가 서로 연결해 주고, 스타트업 코드를 넣어 주면서 실행 파일이 만들어 진다. 템플릿 코드는 바로 이 부분이 다르다. OBJ 파..
로컬 클래스란 지역 클래스를 말한다. ... 지역 클래스라 하니 좀 그런데, 지역 변수 처럼, 지역에서만 쓰일 수 있는 클래스를 말한다. 역시 코드로 정리하는게 빠르겠다. void f() { class LocalClass { // ..... 정의 }; LocalClass d; // .. 이용한다. } 위에선 함수안에 로컬 클래스를 정의 했지만, 클래스 내부도 가능하고 { } 안에서도 가능하다. 비슷한 개념으로 함수안에 함수를 정의할 수 있지 않을까? 라고 생각 했다면, 당신은 이미 센스 쟁이이다. 하지만 안타깝게도 C++에선 지원해 주지 못한다. 어찌되었든,책의 내용을 인용하자면 "로컬 클래스는 새로운 이론을 가능하게하는 기법은 아니지만 구현을 단순화 시키고, 심볼의 지역성을 높여주는 데 기여하는 기법"..
최근댓글