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 였다.

신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요