장바구니 담기 close

장바구니에 상품을 담았습니다.

C++ 템플릿 가이드 2/e

C++ 템플릿 가이드 2/e

  • 다비드반데부르드
  • |
  • 에이콘출판
  • |
  • 2018-10-22 출간
  • |
  • 1068페이지
  • |
  • 188 X 235 X 44 mm
  • |
  • ISBN 9791161752174
판매가

50,000원

즉시할인가

45,000

카드할인

0원(즉시할인 0%)

적립금

2,500원 적립(5%적립)

배송비

무료배송

(제주/도서산간 배송 추가비용:3,000원)

추가혜택

네이버페이 무조건 1%적립+ 추가 1%적립

수량
+ -
총주문금액
45,000

※ 스프링제본 상품은 반품/교환/환불이 불가능하므로 신중하게 선택하여 주시기 바랍니다.

출판사서평




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

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

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

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

006장. 이동 의미 체계와 enable_if<>
__6.1 완벽한 전달
__6.2 특수 멤버 함수 템플릿
__6.3 enable_if<>로 템플릿 비활성화
__6.4 enable_if<> 사용
__6.5 enable_if<> 표현식을 간단하게 만드는 개념 사용
__6.6 요약

007장. 값으로 전달 또는 참조로 전달
__7.1 값으로 전달
__7.2 참조자로 전달
__7.3 std::ref()와 std::cref() 사용
__7.4 문자열 리터럴과 원시 배열
__7.5 반환 값 다루기
__7.6 템플릿 파라미터 선언 추천 방식
__7.7 요약

008장. 컴파일 과정 프로그래밍
__8.1 템플릿 메타프로그래밍
__8.2 constexpr로 계산
__8.3 부분 특수화로 실행 경로 선택
__8.4 SFINAE(치환 실패는 오류가 아니다)
__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.6 rvalue 참조자
__15.7 SFINAE
__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.7 void의 정규화
__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.4 SFINAE 기반 특질
__19.5 IsConvertibleT
__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.5 cons-스타일 형식 목록
__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.2 C++11 이후의 값 카테고리
__B.3 decltype으로 값 카테고리 검사
__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 개념 팁

저자소개

 

다비드 반데부르드(David Vandevoorde) 

 

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

 

니콜라이 M. 요수티스(Nicolai M. Josuttis) 

 

독립 시스템 설계자, 기술 관리자, 컨설턴트, 강사이며, C++ 표준화에서 20년째 활동하고 있다. 라이브러리 워킹그룹에 참여하고 있으며, 특히 일반적인 애플리케이션 프로그래머의 상황에 특별히 관심이 많다. 강의와 권위 있는 책을 쓴 것으로 C++ 커뮤니티에서 잘 알려져 있다. 집필한 책으로는 『The C++ Standard Library, Second Edition』(Addition-Wesley, 2012) 등이 있다. 

 

더글라스 그레고르(Douglas Gregor) 

 

 C++ 라이브러리 설계 경험을 가진 선임 컴파일러 개발자다. 부스트에 초기부터 기여해 오면서 C++ 표준에 반영되기도 한 여러 라이브러리를 개발했다. 그 후 오픈소스 Clang C++ 컴파일러의 구현을 이끌어 C++11 지원을 완성했고, C++11의 표준화에도 활동했다. 렌슬러 폴리테크닉 대학교에서 컴퓨터 과학으로 박사 학위를 받았다. 
 

한정애 

 서울대학교 컴퓨터공학과를 졸업하고 동 대학원에서 박사학위를 받았다. 글로벌 소프트웨어 회사인 SAP에서 개발하다 현재는 삼성증권에서 일하고 있다. 리눅스와 C++ 프로그래밍을 비롯한 여러 가지 프로그래밍 관련 분야에 관심이 많다. 번역서로는 에이콘출판사에서 출간한 『두렵지 않은 C++』(2013), 『C++ 표준 라이브러리』(2013), 『Boost C++ 애플리케이션 개발』(2015), 『Boost.Asio C++ 네트워크 프로그래밍 쿡북』(2017), 『텐서플로1.x로 배우는 머신 러닝』(2018)이 있다. 

 

도서소개

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

 

■ 템플릿의 정확한 동작 방법과 관련 함정을 피하는 방법 

■ 성능이나 안전성을 해지지 않으면서도 소스코드를 재활용하는 방법 

■ 더 유연하고 유지 보수가 쉬운 소프트웨어를 만드는 방법 

■ C++ 표준 라이브러리의 일반 프로그래밍을 활용하는 방법 

■ 요즘 가장 효과적인 기법 연마 

■ 새로 추가될 특성과 개념 미리 알아보기 

교환 및 환불안내

도서교환 및 환불
  • ㆍ배송기간은 평일 기준 1~3일 정도 소요됩니다.(스프링 분철은 1일 정도 시간이 더 소요됩니다.)
  • ㆍ상품불량 및 오배송등의 이유로 반품하실 경우, 반품배송비는 무료입니다.
  • ㆍ고객님의 변심에 의한 반품,환불,교환시 택배비는 본인 부담입니다.
  • ㆍ상담원과의 상담없이 교환 및 반품으로 반송된 물품은 책임지지 않습니다.
  • ㆍ이미 발송된 상품의 취소 및 반품, 교환요청시 배송비가 발생할 수 있습니다.
  • ㆍ반품신청시 반송된 상품의 수령후 환불처리됩니다.(카드사 사정에 따라 카드취소는 시일이 3~5일이 소요될 수 있습니다.)
  • ㆍ주문하신 상품의 반품,교환은 상품수령일로 부터 7일이내에 신청하실 수 있습니다.
  • ㆍ상품이 훼손된 경우 반품 및 교환,환불이 불가능합니다.
  • ㆍ반품/교환시 고객님 귀책사유로 인해 수거가 지연될 경우에는 반품이 제한될 수 있습니다.
  • ㆍ스프링제본 상품은 교환 및 환불이 불가능 합니다.
  • ㆍ군부대(사서함) 및 해외배송은 불가능합니다.
  • ㆍ오후 3시 이후 상담원과 통화되지 않은 취소건에 대해서는 고객 반품비용이 발생할 수 있습니다.
반품안내
  • 마이페이지 > 나의상담 > 1 : 1 문의하기 게시판 또는 고객센터 1800-7327
교환/반품주소
  • 경기도 파주시 문발로 211 1층 / (주)북채널 / 전화 : 1800-7327
  • 택배안내 : CJ대한통운(1588-1255)
  • 고객님 변심으로 인한 교환 또는 반품시 왕복 배송비 5,000원을 부담하셔야 하며, 제품 불량 또는 오 배송시에는 전액을 당사에서부담 합니다.