서브메뉴
검색
본문
Powered by NAVER OpenAPI
-
C++ Template Metaprogramming
저자 : David Abrahams
출판사 : 정보문화사
출판년 : 2005
정가 : 20000, ISBN : 8956742677
책소개
이 책은 오늘날 C++의 가장 강력한 관용구들을 조명한다. 현업 프로그래머들이 오랫동안 기다려온, 실용적인 메타프로그래밍 수단과 기법을 알려주는 책이다.
메타프로그램은 프로그램 코드를 생성하거나 조작하는 프로그램을 말한다. 일반적 프로그래밍에 C++에 도입된 후, 프로그래머들은 컴파일 도중에 프로그램을 조작하기 위한, 본질적으로는 프로그램과 메타프로그램 사이의 장벽을 없애는 다양한 "템플릿 트릭"들을 발견했다. 그러한 능력에 대한 C++ 전문가들의 흥분이 공동체의 관심을 끌긴 했지만, 대부분의 프로그래머들에게 그런 기법의 실질적인 적용은 여전히 먼 나라의 일이었다. 이 책은 메타프로그래밍이 무엇이며 어떤 곳에 사용할 때 가장 빛을 발하는지에 대해 이야기하며, 템플릿 메타프로그래밍을 독자의 실제 업무에 효과적으로 사용하려 할 때 필요한 토대를 제공한다.
목차
서문
감사의 말
이 책을 제대로 활용하려면
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 이식성 요약
참고문헌
찾아보기