C++ 템플릿 (완벽 가이드 | 2 판)

C++ 템플릿 (완벽 가이드 | 2 판)

$55.60
Description
템플릿은 C++의 가장 강력한 기능 중 하나이지만 제대로 이해하는 사람도 적고, 잘 사용하는 사람도 드물다. 이 책에서는 확실한 가이드를 통해 템플릿의 기초에서부터 C++11, C++14, C++17의 최신 기술을 총망라한 고급 이론까지 제공해 이해를 돕는다. 이번 2판에서는 새로운 언어 특성들을 템플릿과 결합시켜 사용하는 방법을 풍부하게 제시한다. 특히 컴파일 시간에 많은 것을 해치우는 메타 프로그래밍 내용이 강화돼, 호기심 많은 독자들의 궁금증을 해소시켜줄 수 있을 것이다.

■ 템플릿의 정확한 동작 방법과 관련 함정을 피하는 방법
■ 성능이나 안전성을 해치지 않으면서도 소스코드를 재활용하는 방법
■ 더 유연하고 유지 보수가 쉬운 소프트웨어를 만드는 방법
■ C++ 표준 라이브러리의 일반 프로그래밍을 활용하는 방법
■ 요즘 가장 효과적인 기법 연마
■ 새로 추가될 특성과 개념 미리 알아보기
저자

다비드반데부르드

다비드반데부르드(DavidVandevoorde)
에디슨디자인그룹의부사장으로자사의컴파일러의C++핵심특성을설계한다.잘알려진포럼인comp.lang.c++.moderated의공동창설자로,C++표준화에도활동하고있다.렌슬러폴리테크닉대학교에서는컴퓨터과학으로석사와박사학위를받았고,브뤼셀자유대학교에서석사학위를받았다.알고리즘개발과강의에관심이많다.

목차

1부.템플릿기본

001장.함수템플릿
1.1함수템플릿
1.2템플릿인자연역
1.3다중템플릿파라미터
1.4기본템플릿인자
1.5함수템플릿오버로딩
1.6그런데...해야하지않는가?
1.7요약

002장.클래스템플릿
2.1클래스템플릿Stack의구현
2.2클래스템플릿Stack의사용
2.3클래스템플릿의일부사용
2.4프렌드
2.5클래스템플릿의특수화
2.6부분특수화
2.7기본클래스템플릿인자
2.8형식별칭
2.9템플릿클래스인자연역
2.10템플릿화된집합
2.11요약

003장.형식이아닌템플릿파라미터
3.1형식이아닌클래스템플릿파라미터
3.2형식이아닌함수템플릿파라미터
3.3형식이아닌템플릿파라미터에대한제약
3.4템플릿파라미터형식로서의auto
3.5요약

004장.가변인자템플릿
4.1가변인자템플릿
4.2접힌표현식
4.3가변인자템플릿애플리케이션
4.4가변클래스템플릿과가변표현식
4.5요약

005장.까다로운기초지식
5.1키워드typename
5.20초기화
5.3this->사용
5.4원시배열과문자열리터럴을사용하는템플릿
5.5멤버템플릿
5.6변수템플릿
5.7템플릿템플릿파라미터
5.8요약

006장.이동의미체계와enableif<>
6.1완벽한전달
6.2특수멤버함수템플릿
6.3enableif<>로템플릿비활성화
6.4enableif<>사용
6.5enableif<>표현식을간단하게만드는개념사용
6.6요약

007장.값으로전달또는참조로전달
7.1값으로전달
7.2참조자로전달
7.3std::ref()와std::cref()사용
7.4문자열리터럴과원시배열
7.5반환값다루기
7.6템플릿파라미터선언추천방식
7.7요약

008장.컴파일과정프로그래밍
8.1템플릿메타프로그래밍
8.2constexpr로계산
8.3부분특수화로실행경로선택
8.4SFINAE(치환실패는오류가아니다)
8.5컴파일과정if
8.6요약

009장.템플릿실제사용
9.1포함모델
9.2템플릿과인라인

010장.기본템플릿용어
10.1‘클래스템플릿’인가,‘템플릿클래스’인가?
10.2치환,인스턴스화,특수화
10.3선언과정의
10.4단정의법칙
10.5템플릿인자와템플릿파라미터
10.6요약

011장.일반라이브러리
11.1호출가능한객체
11.2일반라이브러리를구현에사용되는기타유틸리티
11.3임시값완벽히전달
11.4참조자를템플릿파라미터로쓰기
11.5평가지연시키기
11.6일반라이브러리를작성할때고려해야할것
11.7요약

2부.템플릿상세설명

012장.템플릿기초원리상세학습
12.1파라미터화된선언
12.2템플릿파라미터
12.3템플릿인자
12.4가변템플릿
12.5프렌드
12.6후기

013장.템플릿에서이름
13.1이름분류법
13.2이름룩업
13.3템플릿파싱
13.4상속과클래스템플릿
13.5후기

014장.인스턴스화
14.1주문형인스턴스화
14.2게으른인스턴스화
14.5명시적인스턴스화
14.6컴파일과정if문
14.7표준라이브러리내에서
14.8후기

015장.템플릿인자연역
15.1연역과정
15.2연역된문맥
15.3특별연역상황
15.4초기화자목록
15.5파라미터꾸러미
15.6rvalue참조자
15.7SFINAE
15.8연역의한계
15.9명시적함수템플릿인자
15.10초기화자와표현식에서의연역
15.11별칭템플릿
15.12클래스템플릿인자연역
15.13후기

016장.특수화와오버로딩
16.1‘일반적인코드’가별로좋지않을때
16.2함수템플릿오버로딩
16.3명시적특수화
16.4부분클래스템플릿특수화
16.5부분변수템플릿특수화
16.6후기

017장.앞으로나아갈방향
17.1완화된typename법칙
17.2일반화된형식이아닌템플릿파라미터
17.3함수템플릿의부분특수화
17.4이름붙여진템플릿인자
17.5클래스템플릿오버로딩
17.6끝나지않은꾸러미확장연역
17.7void의정규화
17.8템플릿을위한형식검사
17.9반영메타프로그래밍
17.10꾸러미설비
17.11모듈

3부.템플릿과설계

018장.템플릿의다형적능력
18.1동적다형성
18.2정적다형성
18.3동적과정적다형성
18.4개념사용
18.5설계패턴의새로운형태
18.6일반프로그래밍
18.7후기

019장.특질구현
19.1예제:수열덧셈
19.2특질및정책과정책클래스
19.3형식함수
19.4SFINAE기반특질
19.5IsConvertibleT
19.6멤버검출
19.7기타특질기법
19.8형식분류
19.9정책특질
19.10표준라이브러리에서
19.11후기

020장.형식속성오버로딩
20.1알고리즘특수화
20.2태그디스패치
20.3함수템플릿활성화/비활성화
20.4클래스특수화
20.5인스턴스화안전템플릿
20.6표준라이브러리
20.7후기

021장.템플릿과상속
21.1빈기본클래스최적화(EBCO)
21.2묘하게되풀이되는템플릿패턴(CRTP)
21.3믹스인
21.4이름붙여진템플릿인자
21.5후기

022장.정적과동적다형성사이잇기
22.1함수객체,포인터와std::function<>
22.2일반화된함수포인터
22.3브리지인터페이스
22.4형식삭제
22.5선택적사이잇기
22.6성능고려
22.7후기

023장.메타프로그래밍
23.1현대C++메타프로그래밍의현상태
23.2반영메타프로그래밍의중요성
23.3재귀인스턴스화의비용
23.4계산완전성
23.5재귀인스턴스화와재귀템플릿인자
23.6열거형값과정적상수
23.7후기

024장.형식목록
24.1형식목록해부
24.2형식목록알고리즘
24.3형식이아닌형식목록
24.4꾸러미확장을사용한알고리즘최적화
24.5cons-스타일형식목록
24.6후기

025장.튜플
25.1기본튜플설계
25.2기본튜플연산
25.3튜플알고리즘
25.4튜플확장
25.5튜플최적화
25.6튜플첨자
25.7후기

026장.구별공용체
26.1저장소
26.2설계
26.3값쿼리와추출
26.4요소초기화,할당과소멸
26.5방문자
26.6변이값초기화와할당
26.7후기

027장.표현식템플릿
27.1임시루프와루프분할
27.2템플릿인자에표현식표현
27.3표현식템플릿의성능과한계
27.4후기

028장.템플릿디버깅
28.1얕은인스턴스화
28.2정적단언문
28.3원형
28.4추적자
28.5오라클
28.6후기

부록A.단정의법칙
A.1번역단위
A.2선언과정의
A.3상세한단정의법칙

부록B.값카테고리
B.1전통적인lvalue와rvalue
B.2C++11이후의값카테고리
B.3decltype으로값카테고리검사
B.4참조자형

부록C.오버로딩해석
C.1언제오버로딩해석이적용되는가?
C.2간략화된오버로딩해석
C.3오버로딩세부사항

부록D.표준형식유틸리티
D.1형식특질사용
D.2기본과합성형식카테고리
D.4형식생성
D.5기타특질
D.6형식특질결합
D.7기타유틸리티

부록E.개념
E.1개념사용
E.2개념정의
E.3제약조건오버로딩
E.4개념팁

출판사 서평

이책에서많은것을얻고싶다면먼저C++에대해알아야한다.특별히C++언어의일부특징에대해상세하게설명하기도했지만,언어의기초자체에대해서는설명하지않는다.독자는클래스와상속에대해익숙해야하며,C++표준라이브러리가제공하는입출력스트림과컨테이너같은컴포넌트를사용하는C++프로그램을작성할수있어야한다.auto,decltype,이동의미체계나람다와같은‘현대C++’의기본특성에도익숙해야한다.
전문가와중급자수준정도의프로그래머도이책을유용하게사용할수있을것이다.

이책의목적은템플릿을사용하기시작하는데필요한지식을제공하고템플릿의강점을누릴수있게할뿐아니라,숙련된프로그래머가최정상급의한계를더욱넓히는데필요한정보를제공하는데있다.

1부에서는템플릿에대한기본개념을소개한다.입문서방식으로쓰였다
2부에서는언어의구체적인부분들을제시하며,템플릿과관련된구성에대한간편한참고자료를제공한다.
3부에서는C++템플릿이지원하는기본적인설계와코딩기법에관해설명했다.사소하다고볼수있는아이디어에서부터정교한관용구에이르기까지폭넓게다룬다.

[옮긴이의말]
대체템플릿이라는건뭘까요.그중에서도C++템플릿이라는건뭘까요.이건C++이기는한걸까요?
여러분도이런생각들때있나요?왜객체지향프로그래밍언어라고하는C++에서코드를재활용하기위해상속이아니라템플릿이라고하는수상한짓을하는걸까요.내가공들여작성한코드인데상황에따라선컴파일이되지않을수도있다니.함수를하나만들었는데불러쓰는경우에따라최종바이너리에그함수가하나도포함되지않을수도있고엄청나게많이포함될수도있다니.대체이게뭘까요.게다가형식과관계없이쓸수있는코드라니사실매크로를고급스럽게포장한것일뿐인거아닐까싶기도하지않나요?
한20년전에처음템플릿의개념을접했을때“그래서그걸대체뭐에다쓸건데?에이,나랑은관계없겠네.몰라도되겠다”싶었습니다.일반학부생이학교과제에템플릿으로뭔가를만들어서쓸일이거의없잖아요.그래서템플릿을모르고도잘지냈습니다.아마제대로모르고계속살아도잘지낼것같았습니다.
이책을읽더라도,그래서C++템플릿을이렇게까지내가알아야하는건지갸우뚱할수도있습니다.흔히쓰는vector같은걸떠올려봐도그걸그렇게쓸뿐,직접vector를만들일은별로없으니까요.그래도일상적으로사용하는물건의원리를알면더잘사용할수있는것처럼여러분이라이브러리개발자가아니라,직접템플릿을만들일이없더라도이렇게돌아가고컴파일되는거구나라는걸알아두면앞으로의개발과디버깅에꽤도움이많이될것입니다.특히템플릿디버깅에도움이많이될겁니다.모쪼록독자분들이이훌륭한책에서그동안어렴풋이는알고있지만정확히는몰라서답답했던C++템플릿의동작방식을하나라도알아갈수있기를바랍니다.