"Шаблони C ++: Повне керівництво" (c) 2002 - оновлено C ++ 11?


10

Книга C ++ Шаблони: Повне керівництво , (с) 2002 року, мені здається дуже привабливим, але, оскільки це вже 12 років, я переживаю, що це може бути застарілим. Є кілька дуже сприятливих відгуків Amazon, датованих недавно як рік тому, і я не бачу жодних інших останніх назв на шаблонах C ++. Хтось знає, чи книга про шаблони, опублікована в 2002 році (на відміну від книги, спеціально про STL), матиме синтаксис або поняття, які були замінені або додані, скажімо, до C ++ 11?

Далі йде опис книги Амазонки :

Шаблони є одними з найпотужніших особливостей C ++, але їх занадто часто нехтують, неправильно розуміють та не застосовують. Шаблони C ++: Повне керівництво надає архітекторам та інженерам програмного забезпечення чітке розуміння того, чому, коли та як використовувати шаблони для створення та підтримки більш чистого, швидшого та розумного програмного забезпечення.

Шаблони C ++ починаються з проникливого підручника щодо основних понять та мовних особливостей. Залишок книги служить вичерпною довідкою, зосереджуючись спочатку на мовних деталях, потім на широкому спектрі методів кодування та, нарешті, на вдосконалених програмах для шаблонів. Приклади, які використовуються у всій книзі, ілюструють абстрактні поняття та демонструють кращі практики.

Читачі вчаться

  • Точна поведінка шаблонів
  • Як уникнути підводних каменів, пов’язаних із шаблонами
  • Ідіоми та прийоми, від основної до раніше недокументованої
  • Як повторно використовувати вихідний код, не загрожуючи продуктивності чи безпеці
  • Як підвищити ефективність програм C ++
  • Як створити більш гнучке та ремонтоване програмне забезпечення

2
Оскільки мова C ++ сама змінюється лише повільно (основні зміни вносяться лише кожні 10 років) і залишається значною мірою назад сумісною, книги на C ++ теж не старіють.
Барт ван Інген Шенау

Відповіді:


12

Оновлено (24.08.2016)

Рекомендована стаття з акцентом на C ++ 11:

Вступ до концепції SFINAE C ++: самоаналіз складеного часу класу (Жан Гегант)


Як вивчаючи метапрограмування шаблонів на C ++ кілька місяців тому, я все-таки рекомендую прочитати цю книгу.

Він не включає C ++ 11, але він викладає синтаксис та специфікації C ++ про те, як компілятор повинен обробляти код шаблону. Книга охоплює безліч менш відомих кутів, які стануть вирішальними, якщо вам доведеться істотно використовувати шаблони C ++, незалежно від того, чи стосується метапрограмування чи ні.


Відсутні частини C ++ 11:


Існує конструкція, яку ви побачите багато в коді, який вставляється на Stackoverflow : std::enable_if. Однак на практиці я вважаю це досить важким у використанні через правило одного визначення та SFINAE. Ось чому ця книга важлива, адже вона переходить основи.


Якщо ви використовуєте шаблони C ++ значною мірою в міжплатформованій бібліотеці, вам потрібно буде перевірити-скласти свій код у різних компіляторах. Це відбувається тому, що кожен компілятор має різний рівень відповідності специфікації C ++. Код, який компілює штраф з одного, може бути відхилений іншим, а іноді компілятор, який приймає його, є тим, що порушує специфікацію.


Ось мої записки для читання, коли я переглядаю цю книгу. Сподіваюся, це буде корисним.

Примітки для читання книг - Шаблони C ++ - Повне керівництво (2003)

  • Ch 2.5 - Шаблони функцій - Підсумок
    • Розв’язання перевантажень та кращі практики
  • Розділ 3.3 - Спеціалізація шаблонів класів
  • Ч. 3.4 - Часткова спеціалізація
    • Неоднозначність (помилка ODR) та способи її усунення. ODR = Правило одного визначення
  • Ch 4.3 - Обмеження для параметрів шаблону нетипового типу
    • Приклад: рядкові літерали із зовнішнім зв’язком
  • Ch 5 та Ch 6 - Ці дві глави дуже пригнічують. Ви можете пропустити його, а потім повернутися назад, коли ви емоційно готові до використання шаблонів.

  • Частина II (Ch 8 - Ch ???) Розділ вдосконалених матеріалів.

  • Ч. 8 - Більше правил

    • Для програміста, який вже знайомий з усім Ch 3 (шаблони класів - основи), Ch 8.1 і 8.2 слід читати відразу після Ch 3, оскільки додаткові правила настільки ж важливі і актуальні, як і основні правила. Це позбавить від болю.
  • Ch 8.3.1 (Сторінка 106 у 12-му друку) вперше згадується SFINAE.

  • Ch 8.3 - У цьому розділі подано багато обставин, коли заміна аргументів шаблону могла б призвести до безглуздого синтаксичного розширення (і, таким чином, стане недійсним, що, у свою чергу, вимагає SFINAE). Ця глава має круту криву навчання навіть для досвідчених програмістів на C ++.
  • Ch 11 - Вирахування аргументу шаблону

    • Ch11 містить кілька надуманих прикладів виведення аргументів шаблонів, необхідних для розуміння деяких не менш надуманих застосувань SFINAE.
  • Ch 12.4 далі - Спеціалізація шаблонів часткового класу.

    • Це стосується внутрішньої механіки, до якої часто застосовується програма SFINAE.

Частина III (Ch 17 - Ch ???) Метапрограмування.

  • Ч. 17 - Починається із вступного функціонального програмування.

  • Додаток A.3 - Правило однозначного визначення (ODR) докладно.


3
Проблема, що стосується обговорення TMP перед C ++ 11, полягає в тому, що вона не охоплює, constexprі тому рекомендуватиме TMP для всіх метапрограмувань, навіть у випадках, коли constexprфункції та типи були б набагато кращими.
Бен Войгт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.