특수화(specializtion) : C++ Template 특수화를 뜻하며, 이 특수화는 메타프로그래밍의 분기(if 문 같은 거)로 많이 쓰인다. 기본 템플릿(primary template) : 일반 C++ Template 을 뜻한다. 인스턴스화(instantiation) : 진짜로 깨어난 코드를 말한다. 컴파일러는 깨어난 코드만 문법 검사 등을 처리 한다. 평소의 템플릿 코드는 잠자는 코드이지만, 그 잠자는 코드를 그냥 사용 했을 때, 컴파일러는 템플릿 코드를 깨워주고, 문법 검사도 해준다. 즉, 인스턴스화는 "깨어난 코드" 로 봐도 무방하다. 블로브(blob) : 클래스가 멤버함수나 멤버 값들을 가지고 있을 때, 블로브 라고 한다. 메타 자료(metadata) : C++ Template 에서 매개변..
Type Traits 검색 결과
Type Traits을 알기 위해, 기본적으로 알아야 하는 것은 무엇인가? 첫 번째, 모든 메타 함수들은 이름 공간 boost 안에 존재하고, #include 규칙을 따른다. 두 번째, 모든 수치 메타 함수들은 편의를 위해 메타 함수안에 ::value 를 제공하한다. 또한 bool을 하나의 정수 식으로 분류되고, bool을 사용 하는 메타함수나 모든 정수 값 메타함수들도 ::value 를 제공한다. 세 번째, 이 MPL이 제대로 동작하기 위해선, 비표준적인 컴파일러 지원을 요구하는 특질들이 있다. 예를 들면 has_trivail_destructor 등이 있겠다. 만약 "비표준적인 컴팡이러의 지원" 하지 않는 경우 MPL의 다른 기능으로 대체되어 사용 되어 질 수 있으니, 너무 걱정하지 않아도 된다. 네 ..
Type Traits을 왜 알아야 하는가? C++ Template Metaprogramming 을 하기 위해서는 Template에서 사용 되는 변수들이 무엇인지 알아야 할 것이다. 알다시피 템플릿의 변수들은 타입과, 컴파일 타임에 확인 가능한 상수들이다. 즉, 이러한 변수들을 이용하여, 메타 프로그래밍을 하는 것이다. 이러한 변수들은 더하거나 빼거나, 비교하여, 특정 "연산"을 수행 할 수 있게 되는데, 그것을 "메타 프로그래밍" 이라 부를 수 있다. 이것은 말하는 더하거나 빼거나 등의 "기본 연산"이 있어야 된다는 전제이다. 메타 프로그래밍을 하기 위한 "기본연산"인 Boost 의 MPL 이다. 예를 들자면, "수"를 계산하기 위해선 "계산"이 필요하고, 이 계산의 기본인 "사칙연산"이 있다는 것을 들..
최근댓글