이번 항목은 일반적인 반복자 형태가 아닌, 좀 복잡한 형태로 반복을 해야 할 경우에, 클로저를 사용하는게 더 좋다는 이야기를 하고 있다. 클로저란? C++ 과 비교하자면, 함수 오브젝트를 들수 있겠다. 다른 방법으론 table을 이용한 복잡한 반복자를 구현 할 수 있겠으나, 책에선 성능상의 이유로 클로저가 더 좋다고 이야기 한다. 클로저는 테이블 생성하는것보다 부하가 적으며, 테이블 필드 접근보다 더 빠르기 때문이라고 한다. 관련 링크 : http://www.lua.org/pil/7.4.html 총평 !? 요즘 들어 생각을 안하고 책을 보는거 같다..
전체 글 검색 결과
아무리 찾아도 해설을 못찾았다. .. 암담한 현실앞에 놓여 있다. .. 다 풀어 봐야 하는데, 누구와 비교하면서 공부 해야 하는가...? 난 천재가 아니란 말이다.. 내가 해본 풀이, 추상적 태클과 상상속 태클까지 모두 환영 .. 잘못 된게 있으면 지적해 주세요 2-0. T가 참조 형식이면 T를 그렇지 않으면 const T&를 돌려주는 단항 메타함수 add_const_ref를 작성하라, 그리고 실험할 수 있는 프로그램도 작성하라 (boost::is_same 을 사용 할 수 있다) #include #include // 전방 선언 template class add_const_ref_impl; // 사용되는 메타 함수 : add_const_ref template class add_const_ref { publ..
특수화(specializtion) : C++ Template 특수화를 뜻하며, 이 특수화는 메타프로그래밍의 분기(if 문 같은 거)로 많이 쓰인다. 기본 템플릿(primary template) : 일반 C++ Template 을 뜻한다. 인스턴스화(instantiation) : 진짜로 깨어난 코드를 말한다. 컴파일러는 깨어난 코드만 문법 검사 등을 처리 한다. 평소의 템플릿 코드는 잠자는 코드이지만, 그 잠자는 코드를 그냥 사용 했을 때, 컴파일러는 템플릿 코드를 깨워주고, 문법 검사도 해준다. 즉, 인스턴스화는 "깨어난 코드" 로 봐도 무방하다. 블로브(blob) : 클래스가 멤버함수나 멤버 값들을 가지고 있을 때, 블로브 라고 한다. 메타 자료(metadata) : C++ Template 에서 매개변..
Type Traits을 알기 위해, 기본적으로 알아야 하는 것은 무엇인가? 첫 번째, 모든 메타 함수들은 이름 공간 boost 안에 존재하고, #include 규칙을 따른다. 두 번째, 모든 수치 메타 함수들은 편의를 위해 메타 함수안에 ::value 를 제공하한다. 또한 bool을 하나의 정수 식으로 분류되고, bool을 사용 하는 메타함수나 모든 정수 값 메타함수들도 ::value 를 제공한다. 세 번째, 이 MPL이 제대로 동작하기 위해선, 비표준적인 컴파일러 지원을 요구하는 특질들이 있다. 예를 들면 has_trivail_destructor 등이 있겠다. 만약 "비표준적인 컴팡이러의 지원" 하지 않는 경우 MPL의 다른 기능으로 대체되어 사용 되어 질 수 있으니, 너무 걱정하지 않아도 된다. 네 ..
Type Traits을 왜 알아야 하는가? C++ Template Metaprogramming 을 하기 위해서는 Template에서 사용 되는 변수들이 무엇인지 알아야 할 것이다. 알다시피 템플릿의 변수들은 타입과, 컴파일 타임에 확인 가능한 상수들이다. 즉, 이러한 변수들을 이용하여, 메타 프로그래밍을 하는 것이다. 이러한 변수들은 더하거나 빼거나, 비교하여, 특정 "연산"을 수행 할 수 있게 되는데, 그것을 "메타 프로그래밍" 이라 부를 수 있다. 이것은 말하는 더하거나 빼거나 등의 "기본 연산"이 있어야 된다는 전제이다. 메타 프로그래밍을 하기 위한 "기본연산"인 Boost 의 MPL 이다. 예를 들자면, "수"를 계산하기 위해선 "계산"이 필요하고, 이 계산의 기본인 "사칙연산"이 있다는 것을 들..
최근댓글