템플릿 코드를 작성 하는 것은 , 일반 코드와 다르다. 이 다름에는 여러가지가 있지만, 컴파일러가 코드를 컴파일 하는 시점이 일반 코드와 다른 것이 이뜸이지 않을까 한다. 컴파일러는 어떻게 인식 하는가? 일반 코드의 경우 1. .h, hpp, hxx, 라는 파일에 선언을 넣어 둔다. 이런 파일을 우리는 헤더 파일이라 부른다. 2. cpp, c, cxx 파일에 정의를 넣어 둔다. 이런 파일을 우리는 C 파일이라 부른다. 이러한 헤더파일과 C파일을 컴파일러가 컴파일하게 되는데, 이러한 결과물을 OBJ 파일이라 한다. OBJ 파일은 단순한 기계어 파일인데, 이러한 OBJ 파일들을 링커가 서로 연결해 주고, 스타트업 코드를 넣어 주면서 실행 파일이 만들어 진다. 템플릿 코드는 바로 이 부분이 다르다. OBJ 파..
분류 전체보기 검색 결과
로컬 클래스란 지역 클래스를 말한다. ... 지역 클래스라 하니 좀 그런데, 지역 변수 처럼, 지역에서만 쓰일 수 있는 클래스를 말한다. 역시 코드로 정리하는게 빠르겠다. void f() { class LocalClass { // ..... 정의 }; LocalClass d; // .. 이용한다. } 위에선 함수안에 로컬 클래스를 정의 했지만, 클래스 내부도 가능하고 { } 안에서도 가능하다. 비슷한 개념으로 함수안에 함수를 정의할 수 있지 않을까? 라고 생각 했다면, 당신은 이미 센스 쟁이이다. 하지만 안타깝게도 C++에선 지원해 주지 못한다. 어찌되었든,책의 내용을 인용하자면 "로컬 클래스는 새로운 이론을 가능하게하는 기법은 아니지만 구현을 단순화 시키고, 심볼의 지역성을 높여주는 데 기여하는 기법"..
템플릿의 부분 특화(Partial Template Specialization)란 그 템플릿이 구체화 가능한 인스턴스화 중 특정 부분 집합에 대응 시키는 것을 뜻한다. ..,, 말이 좀 어렵다. 아무리 생각해도 이 말은 좀 어렵다. 다시 해석 하자면, "만약 템플릿 파라미터가 A 라면, 이 템플릿 코드를 인스턴스화 해라" 라고 정하는게 템플릿 특화 이고, "만약 템플릿 파라미터들 중 첫번째가 A 라면, 이 템플릿 코드를 인스턴스화 해라" 이것이 템플릿 부분 특화 이다. 그럼 코드로 정리해 보자 // 아래 코드는 일반적인 클래스 템플릿 코드이다. template class Widget { // 일반화 시킬 구현 코드 }; // 아래 코드는 위의 클래스 템플릿을 특수화 시킨 코드이다. template clas..
내가 컴파일 타임 어써션(Compile-time assertions)을 처음 써 본것은 BOOST를 알고서 부터였다. 컴파일 타임에 정말 많은 것을 할 수 있다는 계기가 된 함수(?) 인데, 다음 코드를 컴파일 할 때 어떤 경고가 뜨는지 한번 보면, 짭짜른 맛이 느껴지면서, 자꾸 먹고 싶어 진다. #include int main( void ) { BOOST_STATIC_ASSERT( 1 == 1 ); BOOST_STATIC_ASSERT( 1 == 0 ); return 0; } 6번째 라인에서 컴파일이 되지 않는 것을 알 수 있는데, 이게 바로 BOOST_STATIC_ASSERT 이다. 쓸 수 있는 곳은 무궁무진하다. 예를 들어서, 캐스팅 함수를 만든다고 치자, 작은 타입에서 큰 타입으로 캐스팅 하는건 자..
UTF-16과 USC2 환경에서 영문이라고 인정 값들은 0x0000 ~ 0x0080 까지 이다. 여기에 리틀엔디안 환경이라면, 상위 바이트와 하위 바이트가 뒤 바뀌므로, 다음과 같다. 0x0000 ~ 0x8000 그러므로 이것을 기준으로 판단 코드를 작성하면 다음과 같다. // 출처 : ikpil.com #include template struct char_type; template struct char_type { typedef unsigned char type; }; template struct char_type { typedef unsigned short type; }; int main( void ) { wchar_t a = L'ㄲ'; typedef char_type::type custom_char..
C++의 공부는 무척 어렵다. 관련 라이브러리가 무엇이 있는지 알아가는데만도 많은 시간이 필요할 뿐 아니라, 언어 자체가 지원하는 코딩 방법도 무척 맣기 때문이다. 그러다가 Template MetaProgramming 을 접하게 되면, 이게 C++ 이야 스크립트 언어야 라는 혼란에 빠지며, 한계에 부딛치게 된다. Template 관련 책부터 봐야겠다 싶어서 다음 3개의 책을 구매 했었는데 1. C++ Template MetaProgramming 2. Modern C++ Design 3. C++ Template 이 중에 1번과, 2번은 정말 상상을 초월할 정도로 어려운 책이다. 한 문구를 몇번이나 반복해서 읽어야지만, 70%는 포기하고, 20%는 아리송하게 넘기고, 9%는 그러겠지 하며, 단 1% 이해만 ..
최근댓글