«Шаблоны C ++: Полное руководство» (c) 2002 - в курсе C ++ 11?

10

Книга C ++ Templates: The Complete Guide , (c) 2002, выглядит очень привлекательной для меня, но, поскольку ей 12 лет, я обеспокоен тем, что она может быть устаревшей. Есть несколько очень хороших обзоров Amazon, датированных совсем недавно, год назад, и я не вижу других очень недавних заголовков по шаблонам C ++. Кто-нибудь знает, будет ли книга о шаблонах, опубликованная в 2002 году (в отличие от книги, посвященной конкретно STL), иметь синтаксис или концепции, которые были заменены, например, C ++ 11?

Ниже приводится описание книги Amazon :

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

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

Читатели учатся

  • Точное поведение шаблонов
  • Как избежать подводных камней, связанных с шаблонами
  • Идиомы и методы, от базового до ранее недокументированного
  • Как повторно использовать исходный код без угрозы для производительности или безопасности
  • Как повысить эффективность программ на C ++
  • Как производить более гибкое и обслуживаемое программное обеспечение
Глава
источник
2
Поскольку сам язык C ++ изменяется очень медленно (крупные изменения вносятся только каждые 10 лет) и остается в значительной степени обратно совместимым, книги по C ++ также не стареют так быстро.
Барт ван Инген Шенау

Ответы:

12

Обновлено (2016/08/24)

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

Введение в концепцию SFINAE в C ++: самоанализ времени компиляции члена класса (Жан Гугант)


Будучи учеником C ++ Template Metaprogramming несколько месяцев назад, я все же рекомендовал бы прочитать эту книгу.

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


Недостающие части из C ++ 11:


Существует конструкция, которую вы увидите много в коде, который вставлен в Stackoverflow: std::enable_if . Однако на практике это довольно сложно использовать из-за правила единого определения и SFINAE. Вот почему эта книга важна, потому что она идет по основам.


Если вы используете шаблоны C ++ в основном в кроссплатформенной библиотеке, вам нужно будет тестировать-компилировать свой код в разных компиляторах. Это потому, что каждый компилятор имеет разный уровень соответствия спецификации C ++. Код, который хорошо компилируется для одного, может быть отклонен другим, и иногда компилятор, который его принимает, нарушает спецификацию.


Вот мои заметки для чтения, когда я прохожу эту книгу. Надеюсь, это будет полезно.

Книга чтения заметок - шаблоны C ++ - Полное руководство (2003)

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

  • Часть II (гл 8 - ч ???) Раздел продвинутых вещей.

  • Глава 8 - Больше правил

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

  • Гл 8.3 - В этом разделе представлено много обстоятельств, когда подстановка аргументов шаблона привела бы к бессмысленным синтаксическим расширениям (и, таким образом, стала бы недействительной, что, в свою очередь, требовало SFINAE). Эта глава имеет крутой курс обучения даже для опытных программистов C ++.
  • Ч. 11 - Шаблон Аргумент Дедукция

    • Ch11 содержит несколько вымышленных примеров вычитания аргумента шаблона, которые необходимы для понимания некоторых не менее надуманных приложений SFINAE.
  • Глава 12.4 и далее - Частичная специализация шаблона класса.

    • Это охватывает внутреннюю механику, которая часто используется в приложении SFINAE.

Часть III (гл 17 - ч ???) Метапрограммирование.

  • Гл 17 - Начинается с вводного функционального программирования.

  • Приложение. А.3 - Правило единого определения (ODR) в деталях.

rwong
источник
3
Проблема обсуждения TMP до C ++ 11 заключается в том, что он не будет охватывать constexprи поэтому будет рекомендовать TMP для всех метапрограммирований, даже в тех случаях, когда constexprфункции и типы будут гораздо лучше подходить.
Бен Фойгт