템플릿의 부분 특화(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 이다. 쓸 수 있는 곳은 무궁무진하다. 예를 들어서, 캐스팅 함수를 만든다고 치자, 작은 타입에서 큰 타입으로 캐스팅 하는건 자..
C++의 공부는 무척 어렵다. 관련 라이브러리가 무엇이 있는지 알아가는데만도 많은 시간이 필요할 뿐 아니라, 언어 자체가 지원하는 코딩 방법도 무척 맣기 때문이다. 그러다가 Template MetaProgramming 을 접하게 되면, 이게 C++ 이야 스크립트 언어야 라는 혼란에 빠지며, 한계에 부딛치게 된다. Template 관련 책부터 봐야겠다 싶어서 다음 3개의 책을 구매 했었는데 1. C++ Template MetaProgramming 2. Modern C++ Design 3. C++ Template 이 중에 1번과, 2번은 정말 상상을 초월할 정도로 어려운 책이다. 한 문구를 몇번이나 반복해서 읽어야지만, 70%는 포기하고, 20%는 아리송하게 넘기고, 9%는 그러겠지 하며, 단 1% 이해만 ..
개요 5.4 템플릿 템플릿 파라미터 5.5 0 초기화 5.6 함수 템플릿에서 문자열 리터럴을 인자로 사용 5.4 템플릿 템플릿 파라미터 ( template template paramater ) 내가 보는 책은 "C++ Template" 이다. 이 책에 이번 주제인 template tempalte paramater 를 설명하고 있는데, 난 차례대로 "이것이 바로 템플릿 템플릿 파라미터이다" 라고 말해주는 코드를 컴퓨터에 입력 했다. #include template class Stack { private: CONT m_; }; int main( void ) { Stack stack; return 0; } 그리고 이것을 컴파일 해보면, 알겠지만, 클래스 템플릿의 두번째 템플릿 파라미터가 템플릿인 것이 보인다...
개요 저번장까지 이건 이렇고 저건 저렇다 라고 설명한 한 항목이였다. 이번 장은, 실질적으로 코드를 작성하는데 도움이 될 만한 몇가지 문법 들을 설명한다. 5.1 typename 5.2 this 5.3 멤버 템플릿 5.4 템플릿 템플릿 파라미터 5.5 0 초기화 5.6 함수 템플릿에서 문자열 리터럴을 인자로 사용 본문 5.1 typename이란 무엇이고, 어떤 용도인가? 지금까지 typename 은 템플릿 파라미터를 선언할 때 사용하는 키워드로 알고 있었지만, 여기에 한가지 의미가 더 있었다. 바로 "이것은 타입이다" 라고 알려 주는 의미이다. "이것은 타입이다"라는 의미가 왜 필요한가? 만약, 템플릿 파라미터가 클래스일 떄, 그 내부 타입이, "타입" 이라고 일러주지 않는 다면, 컴파일러가 에러를 벹어..
개요 지금까지 함수, 클래스 템플릿의 파라미터는 데이터형만 있는 것처럼 정리하였으나, 일반값도 있다. 이번 장은 데이터 형이 아닌 템플릿 파라미터란 무엇이고, 어떻게 사용하며, 주의해야 할 사항에 대해서 정리 되어 있다. 본문 데이터형이 아닌 템플릿 파라미터는 무엇인가? 상수로 평가되는 모든 값들이다. 하지만 예외적으로, 부동소수점(float, double) 상수와 문자열 상수(char *, wchar_t *)는 템플릿 파라미터로 사용 할 수 없다. 그래서 코드짜면 다음과 같이 코딩 할 수 있다. // 데이터형이 아닌 템플릿 파라미터 template class Stack { private: T elems[MAXSIZE]; }; 여기서 보듯이 첫번째 템플릿 파라미터는 데이터형이지만, 두번째 파라미터는 인트..
최근댓글