Книга C ++ Templates: The Complete Guide , (c) 2002, выглядит очень привлекательной для меня, но, поскольку ей 12 лет, я обеспокоен тем, что она может быть устаревшей. Есть несколько очень хороших обзоров Amazon, датированных совсем недавно, год назад, и я не вижу других очень недавних заголовков по шаблонам C ++. Кто-нибудь знает, будет ли книга о шаблонах, опубликованная в 2002 году (в отличие от книги, посвященной конкретно STL), иметь синтаксис или концепции, которые были заменены, например, C ++ 11?
Ниже приводится описание книги Amazon :
Шаблоны являются одними из наиболее мощных функций C ++, но они слишком часто игнорируются, неправильно понимаются и используются неправильно. Шаблоны C ++. Полное руководство предоставляет архитекторам и инженерам программного обеспечения четкое представление о том, почему, когда и как использовать шаблоны для создания и поддержания более чистого, быстрого и интеллектуального программного обеспечения более эффективно.
Шаблоны C ++ начинаются с проницательного учебника по основным понятиям и особенностям языка. Оставшаяся часть книги служит исчерпывающим справочником, фокусируясь сначала на деталях языка, затем на широком спектре методов кодирования и, наконец, на передовых приложениях для шаблонов. Примеры, используемые в книге, иллюстрируют абстрактные концепции и демонстрируют лучшие практики.
Читатели учатся
- Точное поведение шаблонов
- Как избежать подводных камней, связанных с шаблонами
- Идиомы и методы, от базового до ранее недокументированного
- Как повторно использовать исходный код без угрозы для производительности или безопасности
- Как повысить эффективность программ на C ++
- Как производить более гибкое и обслуживаемое программное обеспечение
Ответы:
Обновлено (2016/08/24)
Рекомендуемая статья с акцентом на C ++ 11:
Введение в концепцию SFINAE в C ++: самоанализ времени компиляции члена класса (Жан Гугант)
Будучи учеником C ++ Template Metaprogramming несколько месяцев назад, я все же рекомендовал бы прочитать эту книгу.
Он не включает в себя C ++ 11, но содержит синтаксис и спецификации C ++ о том, как компилятор должен обрабатывать код шаблона. Книга охватывает множество менее известных углов, которые станут критически важными, если вам нужно будет широко использовать шаблоны C ++, независимо от того, задействовано ли метапрограммирование.
Недостающие части из C ++ 11:
is_*
будет отображаться.decltype
, http://en.cppreference.com/w/cpp/language/decltypedeclval
, http://en.cppreference.com/w/cpp/utility/declvalmove
http://en.cppreference.com/w/cpp/utility/moveforward
http://en.cppreference.com/w/cpp/utility/forwardСуществует конструкция, которую вы увидите много в коде, который вставлен в Stackoverflow:
std::enable_if
. Однако на практике это довольно сложно использовать из-за правила единого определения и SFINAE. Вот почему эта книга важна, потому что она идет по основам.Если вы используете шаблоны C ++ в основном в кроссплатформенной библиотеке, вам нужно будет тестировать-компилировать свой код в разных компиляторах. Это потому, что каждый компилятор имеет разный уровень соответствия спецификации C ++. Код, который хорошо компилируется для одного, может быть отклонен другим, и иногда компилятор, который его принимает, нарушает спецификацию.
Вот мои заметки для чтения, когда я прохожу эту книгу. Надеюсь, это будет полезно.
Книга чтения заметок - шаблоны C ++ - Полное руководство (2003)
Глава 5 и глава 6 - Эти две главы очень удручают. Вы можете пропустить это и затем вернуться, когда вы эмоционально готовы к использованию шаблонов.
Часть II (гл 8 - ч ???) Раздел продвинутых вещей.
Глава 8 - Больше правил
В главе 8.3.1 (стр. 106 в 12-й печати) впервые упоминается SFINAE.
Ч. 11 - Шаблон Аргумент Дедукция
Глава 12.4 и далее - Частичная специализация шаблона класса.
Часть III (гл 17 - ч ???) Метапрограммирование.
Гл 17 - Начинается с вводного функционального программирования.
Приложение. А.3 - Правило единого определения (ODR) в деталях.
источник
constexpr
и поэтому будет рекомендовать TMP для всех метапрограммирований, даже в тех случаях, когдаconstexpr
функции и типы будут гораздо лучше подходить.