이미 소장하고 있다면 판매해 보세요.
|
서문
감사의 말 이 책을 제대로 활용하려면 1. 도입 1.1 시작하며 1.2 메타프로그램이란? 1.3 호스트 언어 안에서의 메타프로그래밍 1.4 C++의 메타프로그래밍 1.4.1 수치 계산 1.4.2 형식의 계산 1.5 메타프로그래밍이 필요한 이유 1.5.1 대안 1: 실행시점 계산 1.5.2 대안 2: 사용자 해석 1.5.3 C++ 메타프로그래밍이 필요한 이유 1.6 언제 메타프로그래밍을 할 것인가 1.7 메타프로그래밍 라이브러리가 필요한 이유 2. 특질과 형식 다루기 2.1 형식 연관 2.1.1 직접적인 접근방식 2.1.2 좀 더 우회적인 방식 2.1.3 지름길을 찾아서 2.2 메타함수 2.3 수치적인 메타함수 2.4 실행 시점에서의 선택 2.4.1 iter_swap에 대해 좀 더 2.4.2 좀 더 최적화하자면 2.4.3 또 다른 문제 2.4.4 최종적인 해결책 2.5 Boost Type Traits 라이브러리에 대한 간단한 소개 2.5.1 일반적인 사항 2.5.2 기본 형식 범주화 2.5.3 2차 형식 범주화 2.5.4 형식 속성들 2.5.5 형식들 사이의 관계 2.5.6 형식 변환 2.6 무항 메타함수 2.7 메타함수의 정의 2.8 역사 2.9 세부사항 2.10 실습 과제 3. 메타함수에 대해 좀 더 자세히 3.1 차원 해석 3.1.1 차원의 표현 3.1.2 수량의 표현 3.1.3 더하기와 빼기의 구현 3.1.4 곱하기의 구현 3.1.5 나누기 구현 3.2 고차 메타함수들 3.3 자리표 다루기 3.3.1 lambda 메타함수 3.3.2 apply 메타함수 3.4 람다의 추가적인 기능들 3.4.1 부분적인 메타함수 적용 3.4.2 메타함수 합성 3.5 람다의 세부사항 3.5.1 자리표 3.5.2 자리표 표현식의 정의 3.5.3 람다와 비 메타함수 템플릿 3.5.4 게으름의 가치 3.6 세부사항 3.7 실습 과제 4. 정수 형식 래퍼들과 연산들 4.1 부울 래퍼들과 연산들 4.1.1 형식 선택 4.1.2 게으른 형식 선택 4.1.3 논리 연산자들 4.2 정수 래퍼들과 연산들 4.2.1 정수 연산자들 4.2.2 _c 정수 단축 표기 4.3 실습 과제 5. 순차열과 반복자 5.1 개념 5.2 순차열과 알고리즘 5.3 반복자 5.4 반복자 개념들 5.4.1 전진 반복자 5.4.2 양방향 반복자 5.4.3 임의 접근 반복자 5.5 순차열 개념들 5.5.1 순차열 운행 개념들 5.5.2 확장성 5.5.3 연관 순차열 5.5.4 확장 가능 연관 순차열 5.6 순차열의 상등 5.7 고유 순차열 연산들 5.8 순차열 클래스들 5.8.1 list 5.8.2 vector 5.8.3 deque 5.8.4 range_c 5.8.5 map 5.8.6 set 5.8.7 iterator_range 5.9 정수 순차열 래퍼들 5.10 순차열 파생 5.11 순차열을 직접 작성하려면 5.11.1 tiny 순차열 만들기 5.11.2 반복자 표현 5.11.3 tiny에 대한 at 구현 5.11.4 tiny_iterator 구현의 완성 5.11.5 begin과 end 5.11.6 확장성 추가 5.12 세부사항 5.13 실습 과제 6. 알고리즘 6.1 알고리즘, 관용구, 재사용, 추상 6.2 MPL의 알고리즘들 6.3 삽입자 6.4 기본적인 순차열 알고리즘들 6.5 조회 알고리즘들 6.6 순차열 생성 알고리즘들 6.7 알고리즘 직접 작성하기 6.8 세부사항 6.9 실습 과제 7. 뷰와 반복자 적응자 7.1 예제 몇 개 7.1.1 순차열 요소들로 계산된 값들의 비교 7.1.2 여러 순차열들을 결합하기 7.1.3 불필요한 계산 피하기 7.1.4 선택적인 요소 처리 7.2 뷰 개념 7.3 반복자 적응자 7.4 뷰 직접 작성하기 7.5 역사 7.6 실습 과제 8. 진단 8.1 오류 소설을 디버깅하기 8.1.1 인스턴스화 역추적 8.1.2 다양한 오류 서식들 8.2 도구를 이용한 진단 분석 8.2.1 다른 의견도 들어볼 것 8.2.2 소스 코드 이동 보조 기능을 활용할 것 8.2.3 쓸 데 없는 가지를 쳐낼 것 8.3 의도적인 진단 생성 8.3.1 정적 단언문 8.3.2 MPL 정적 단언문 8.3.3 형식 출력 8.4 역사 8.5 세부사항 8.6 실습 과제 9. 컴파일 시점/실행시점 경계 건너기 9.1 for_each 9.1.1 형식 출력 9.1.2 형식 방문 9.2 구현 선택 9.2.1 if 문 9.2.2 클래스 템플릿 특수화 9.2.3 꼬리표 분배 9.3 객체 생성기 9.4 구조 선택 9.5 클래스 합성 9.6 템플릿 인수로서의 (멤버)함수 포인터 9.7 형식 삭제(type erasure) 9.7.1 예제 하나 9.7.2 일반화 9.7.3 "수동" 형식 삭제 9.7.4 자동적인 형식 삭제 9.7.5 인터페이스의 보존 9.8 묘하게 되풀이되는 템플릿 패턴 9.8.1 함수의 생성 9.8.2 중복적재 해소의 관리 9.9 중복적재 집합의 명시적인 관리 9.10 "sizeof 트릭" 9.11 요약 9.12 실습 과제 10. 영역 국한 내장 언어 10.1 작은 언어 하나... 10.2 ...생각보다는 크다 10.2.1 make 유틸리티 언어 10.2.2 배커스 나우어 형식 10.2.3 YACC 10.2.4 DSL 요약 10.3 뒤집힌 DSL 10.4 호스트 언어로서의 C++ 10.5 Blitz++와 표현식 템플릿 10.5.1 문제 10.5.2 표현식 템플릿 10.5.3 그 외의 Blitz++ 마법 10.6 범용 DSEL들 10.6.1 명명된 매개변수 10.6.2 익명 함수 만들기 10.7 Boost Spirit 라이브러리 10.7.1 닫힘 10.7.2 하위규칙 10.8 요약 10.9 실습 과제 11. DSEL 설계 따라하기 11.1 유한상태기계 11.1.1 영역 추상 11.1.2 표기법 11.2 프레임웍 설계 목표 11.3 프레임웍 인터페이스 기초 11.4 DSL 선택 11.4.1 전이표의 표현 11.4.2 종합 11.5 구현 11.6 분석 11.7 C++ 언어 자체의 개선 방향 11.8 실습 과제 부록 A 전처리기 메타프로그래밍 입문 A.1 동기 A.1.1 코드 생성 A.1.2 해결책은 전처리기 A.2 전처리기의 근본 추상들 A.2.1 전처리 토큰 A.2.2 매크로 A.2.3 매크로 인수 A.3 전처리기 라이브러리 구조 A.4 전처리기 라이브러리의 추상들 A.4.1 되풀이 A.4.2 산술, 논리, 비교 연산들 A.4.3 제어 구조 A.4.4 토큰 붙이기 A.4.5 자료 형식 A.5 실습 과제 부록 B typename 키워드와 template 키워드 B.1 논점 B.1.1 문제점 하나 B.1.2 형식의 모호성 해소 B.1.3 class 대 typename B.1.4 문제점 둘 B.1.5 템플릿 모호성 해소 B.2 규칙 B.2.1 typename 키워드 B.2.2 template 키워드 부록 C 컴파일 시점 성능 C.1 계산 모형 C.1.1 결과 보존 C.1.2 예제 하나 C.1.3 숨겨져 있는 것들 C.2 컴파일 시간 관리 C.3 테스트 C.3.1 결과 보존의 효과 C.3.2 기억한 결과의 조회 비용 C.3.3 특수화의 언급 C.3.4 내포된 템플릿 인스턴스화 C.3.5 부분 특수화 개수 C.3.6 긴 기호 C.3.7 메타함수 이름의 구조 복잡도 부록 D MPL 이식성 요약 참고문헌 찾아보기 |