“C ++ 템플릿 : 전체 가이드”(c) 2002—C ++ 11을 사용하여 최신 상태입니까?


10

C ++ Templates : The Complete Guide , (c) 2002 책 은 저에게 매우 호소력이있는 것처럼 보이지만 12 살이 되었기 때문에 구식이 아닐 수도 있습니다. 최근 1 년 전의 최신 Amazon 리뷰가 있으며 C ++ 템플릿에 대한 다른 최신 타이틀은 표시되지 않습니다. 2002 년에 출판 된 템플릿에 관한 책 (특히 STL에 관한 책과 반대되는 책)이 C ++ 11에 의해 대체되거나 추가 된 구문이나 개념을 갖는지 아는 사람이 있습니까?

다음은 Amazon 책 설명 에서 가져온 것입니다 .

템플릿은 C ++의 가장 강력한 기능 중 하나이지만 너무 자주 무시, 오해 및 오용되기도합니다. C ++ 템플릿 : 전체 가이드는 소프트웨어 설계자 및 엔지니어에게 템플릿을 사용하여 더 깨끗하고 빠르며 똑똑한 소프트웨어를보다 효율적으로 구축 및 유지 관리하는 이유,시기 및 방법에 대한 명확한 이해를 제공합니다.

C ++ 템플릿은 기본 개념 및 언어 기능에 대한 통찰력있는 자습서로 시작합니다. 이 책의 나머지 부분은 먼저 언어 세부 사항, 광범위한 코딩 기술, 템플릿의 고급 응용 프로그램에 중점을 둔 포괄적 인 참조 자료로 사용됩니다. 이 책 전체에서 사용 된 예는 추상적 인 개념을 설명하고 모범 사례를 보여줍니다.

독자는 배우다

  • 템플릿의 정확한 동작
  • 템플릿과 관련된 함정을 피하는 방법
  • 기본에서 이전에 문서화되지 않은 숙어 및 기술
  • 성능이나 안전을 위협하지 않고 소스 코드를 재사용하는 방법
  • C ++ 프로그램의 효율성을 높이는 방법
  • 보다 유연하고 유지 관리 가능한 소프트웨어를 생성하는 방법

2
C ++ 언어 자체는 느리게 만 변경되고 (주로 큰 변화는 10 년마다 한 번만 이루어짐) 이전 버전과 호환이 가능하기 때문에 C ++에 관한 서적도 그렇게 빨리 노화되지 않습니다.
Bart van Ingen Schenau

답변:


12

업데이트 됨 (2016/08/24)

C ++ 11에 중점을 둔 권장 기사 :

C ++의 SFINAE 개념 소개 : 클래스 멤버의 컴파일 타임 내부 검사 (Jean Guegant)


몇 달 전에 C ++ 템플릿 메타 프로그래밍을 배우면서이 책을 읽는 것이 좋습니다.

C ++ 11은 포함되어 있지 않지만 컴파일러가 템플릿 코드를 처리하는 방법에 대한 구문과 C ++ 사양을 설명합니다. 이 책은 메타 프로그래밍과 관련이 있는지 여부에 관계없이 C ++ 템플릿을 실질적으로 사용해야하는 경우 결정적인 코너가 많이 있습니다.


C ++ 11에서 빠진 부분은 다음과 같습니다.


Stackoverflow :에 붙여 넣은 코드가 많이있는 구문이 있습니다 std::enable_if. 그러나 실제로는 One-Definition Rule과 SFINAE로 인해 사용하기가 상당히 어렵다는 것을 알았습니다. 이것이이 책이 기본을 넘어 서기 때문에 중요한 이유입니다.


크로스 플랫폼 라이브러리에서 C ++ 템플릿을 사용하는 경우 다른 컴파일러에서 코드를 테스트 컴파일해야합니다. 각 컴파일러는 C ++ 사양에 대해 서로 다른 수준의 준수를 갖기 때문입니다. 하나에서 잘 컴파일 된 코드는 다른 코드에 의해 거부 될 수 있으며 때로는 코드를 수락하는 컴파일러가 사양을 위반하는 코드입니다.


다음은이 책을 읽을 때 읽은 메모입니다. 도움이 되길 바랍니다.

책 읽기 노트-C ++ 템플릿-전체 가이드 (2003)

  • Ch 2.5-함수 템플릿-요약
    • 과부하 해결 및 모범 사례
  • Ch 3.3-클래스 템플릿의 전문화
  • 3.4 장-부분 전문화
    • 모호성 (ODR 오류) 및 해결 방법 ODR = 일 정의 규칙
  • Ch 4.3-비 타입 템플릿 매개 변수에 대한 제한 사항
    • 예 : 외부 링크가있는 문자열 리터럴
  • 5 장과 6 장 –이 두 장은 매우 우울합니다. 템플릿을 사용할 준비가 되었으면 건너 뛰고 되돌아 갈 수 있습니다.

  • 파트 II (Ch 8-Ch ???) 고급 항목의 섹션.

  • Ch 8-더 많은 규칙

    • Ch 3 전체 (클래스 템플릿-기본)에 이미 익숙한 프로그래머의 경우 추가 규칙이 기본 규칙만큼 중요하고 관련이 있으므로 Ch 8.1 및 8.2는 Ch 3 바로 다음에 읽어야합니다. 이것은 약간의 고통을 구할 것입니다.
  • 8.3.1 장 (12 번째 인쇄의 106 페이지)에 SFINAE가 처음으로 언급되었습니다.

  • Ch 8.3-이 절에서는 템플릿 인자 대체가 의미없는 구문 확장을 야기 할 수있는 많은 상황을 소개한다 (따라서 무효화되어 SFINAE가 필요함). 이 장은 숙련 된 C ++ 프로그래머들에게도 가파른 학습 곡선을 가지고 있습니다.
  • 11 장-템플릿 인수 공제

    • Ch11에는 똑같이 고안된 SFINAE 응용 프로그램을 이해하는 데 필요한 몇 가지 유용한 템플릿 인수 공제 예제가 포함되어 있습니다.
  • Ch 12.4 이후-부분 클래스 템플릿 전문화.

    • 여기에는 종종 SFINAE 응용 프로그램에서 요구되는 내부 메커니즘이 포함됩니다.

Part III (Ch 17-Ch ???) 메타 프로그래밍.

  • Ch 17-입문 기능 프로그래밍으로 시작합니다.

  • 앱. A.3-ODR (One-Definition Rule) 세부 사항


3
TMP에 대한 C ++ 11 이전 토론의 문제점은 다루지 않으며 constexpr따라서 constexpr함수와 유형이 훨씬 더 적합한 모든 메타 프로그래밍에 대해 TMP를 권장 한다는 것입니다.
벤 Voigt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.