Рецензии на книгу
"Шаблоны C++: справочник разработчика"
03.08.2005
RSDN.RU (портал)
Валерий Лаптев
http://www.rsdn.ru/res/book/cpp/Template.xml
Жаль, что эта книга появилась после книги Александреску "Современное проектирование на С++". Хотя книга заявлена как справочник, но на самом деле она является скорее учебником по шаблонам. Это очень хорошее, я бы даже сказал, исчерпывающее (по крайней мере, на данный момент) описание шаблонов С++. Это и неудивительно, поскольку один из авторов (Дэвид Вандевурд) является членом рабочей группы Комитета по базовым стандартам языка С++, а другой (Николаи М. Джосаттис) - член рабочей группы Комитета по стандартам библиотек С++. Кому, как не им, писать такие книжки.
Книга состоит из 4-х частей. Первая часть, естественно, посвящена основам. Написано не только то, что можно делать с шаблонами, но и то, что нельзя. Вторая часть - развитие первой. Тут излагаются более тонкие моменты механизма шаблонов. Например, здесь описываются "взаимоотношения" шаблонов и единиц трансляции.
Большой интерес вызывает 13-я глава, в которой описываются возможные будущие расширения механизма шаблонов. Некоторые из расширений уже просто просятся в С++. Например, параметры шаблонов функций по умолчанию, или не целые аргументы шаблонов. Скорее всего многие из представленных расширений появятся в следующем стандарте.
Но самыми интересными для программистов-практиков, конечно, являются третья и четвертая части. Наконец-то я увидел простое и понятное объяснения, откуда возникает необходимость класса свойств и как такой класс создать. Несомненный интерес представляют последние две главы 3-й части: метапрограммирование и шаблоны выражений. Программисты-ветераны сразу вспомнят макроассемблер, в котором с помощью макросов можно было делать то же самое (и даже больше, так как макроассемблер включает полный комплект управляющих макрооператоров). Однако метавычисления - это необычное и нестандартное применение шаблонов.
Для меня оказалась очень интересной четвертая часть. Классификация типов описана проще и понятней, чем у Александреску. В главе об интеллектуальных указателях описывается техника подсчета ссылок. В главе о кортежах излагается техника использования шаблонов для контейнера, состоящего из элементов разного типа.
Собственно, такая конструкция и называется кортежем. А в последней главе можно прочитать много интересного о функторах.
Для С++-программистов эта книга - настольная. Во всяком случая я держу ее под рукой постоянно.