Type Traits을 알기 위해, 기본적으로 알아야 하는 것은 무엇인가?
첫 번째, 모든 메타 함수들은 이름 공간 boost 안에 존재하고, #include <boost/type_traits/메타함수-이름.hpp> 규칙을 따른다.
두 번째, 모든 수치 메타 함수들은 편의를 위해 메타 함수안에 ::value 를 제공하한다. 또한 bool을 하나의 정수 식으로 분류되고, bool을 사용 하는 메타함수나 모든 정수 값 메타함수들도 ::value 를 제공한다.
세 번째, 이 MPL이 제대로 동작하기 위해선, 비표준적인 컴파일러 지원을 요구하는 특질들이 있다. 예를 들면 has_trivail_destructor 등이 있겠다. 만약 "비표준적인 컴팡이러의 지원" 하지 않는 경우 MPL의 다른 기능으로 대체되어 사용 되어 질 수 있으니, 너무 걱정하지 않아도 된다.
네 번째, is_enum<T> 같은 형식 범주화 메타함수들은 일반적으로 cv(const 와 volatile)을 무시한다.
Type Traits의 기본 연산들은 무엇인가? (1차 형식)
기본 연산 |
하는 일 : 모두다 참이면 ::value 로 ture 와 false 를 받을 수 있다. |
is_pointer<T> | T는 포인터 인가? |
is_reference<T> | T는 레퍼런스 인가?? |
is_array<T> | T는 배열인가? |
is_enum<T> | T는 나열자 인가? |
is_intergral<T> | T는 정수 인가? (char, bool 도 포함 한다) |
is_float<T> | T는 부동소수점인가? (float 과 double, long double을 포함 한다.) |
is_class<T> | T는 클래스인가?(컴파일러 지원이 없다면 true만 돌려 준다.) |
is_union<T> | T는 union 인가?(컴파일러 지원이 없다면 false만 돌려 준다. |
is_member_pointer<T> |
T가 멤버 포인터 인가? |
is_function<T> |
T가 함수인가? |
is_void<T> | T가 void 형식인가?(cv void만 됨) |
해당 코드들은 전부 다음과 같은 식으로 확인 가능하다. is_pointer<T>::value , 또는 is_pointer<T>::type::value
Type Traits의 곱하기(?)같은 연산들은 무엇인가? (2차 형식)
2차 형식 연산 |
1차 형식과 동일 |
is_arithmetic<T> | 수 인가? |
is_compound<T> | is_fundamental<T> 아닌가? |
is_fundamental<T> | 수 또는 void인가? |
is_member_function_pointer<T> | T가 멤버 함수인가? |
is_object<T> | T가 object 인가?(함수,레퍼런스,void가 아닌 것들) |
is_scalar<T> | T가 숫자, enum,pointer,member_point 인가? |
나머지 더 있지만, Boost 의 메뉴얼 보는게 더 자세할 듯 싶어, 패스 하려 하지만, 무엇을 패스 했는지 기록해 둔다.
패스 한 것들
1. 형 속성(예외가 있나 없나 등등등)에 관련 된 것들
2. 형 변환에 관련된 것들
총평
뭐 있겠나. 사용 법만 알아도 꽤 재미있는 type traits 였다.
'책 정리 > C++ Template Metaprogramming' 카테고리의 다른 글
CPPTM : 2 장 실습과제 : (Chapter 2 : Answers ) (2) | 2008.12.21 |
---|---|
CPPTM : 메타 프로그래밍에서 쓰이는 기초 용어 모두 정리 (0) | 2008.12.21 |
C++ Template Metaprogramming : CPPTM - cd backup (0) | 2008.12.21 |
CPTM을 하기 위해 필요한 것 : Type Traits (0) | 2008.12.20 |
C++ 템플릿 메타프로그래밍 : C++ Template metaprogamming 개념 사냥하기 (0) | 2008.12.04 |
C++ Template Metaprogramming : 메타 프로그래밍의 강력함에 맛들다. (0) | 2008.12.04 |
최근댓글