Современный дизайн C++. Применяются общие шаблоны программирования и шаблоны проектирования.
Я купил эту книгу для нашей группы в компании, возможно, чтобы улучшить наши дизайнерские навыки и, в конечном счете, иметь лучшие практики программирования. Прочитав его, я обнаружил, в основном, набор изящных приемов, которые можно использовать с шаблоном, и я не уверен, стоит ли это - и не вредно ли - включать его в наш код, тем самым привнося сложность / читабельность кода и неосуществимость,
Я хотел бы узнать у последователей, что вы используете из этой книги? Что актуально и важно для профессиональной разработки программного обеспечения, чего следует избегать?
Общая мысль об этой книге и о том, как она вписывается в разработку программного обеспечения крупномасштабной системы (на тех же них я люблю книгу Джона Лакоса)?
Что такое эффект Александреску?
8 ответов
Помимо стандартного использования шаблонов, операция, которую я нахожу наиболее полезной в отношении информации, обсуждаемой в общем программировании на C++, заключается в возможности использовать шаблоны для создания ошибок времени компиляции для сценариев с недействительным кодом. Как только вы это освоите, вы сможете очень эффективно превратить класс того, что будет ошибкой во время выполнения, в ошибку времени компиляции.
Я имел большой успех, делая это на работе. Конечно, он генерирует совершенно нечитаемые сообщения, и мои коллеги время от времени заходят и говорят: "Что это за мир?". Но каждый раз это была ошибка, и они не могли ее скомпилировать. Я также тщательно комментирую конкретные ошибки в надежде, что они в меру понятны.
Приблизительно в 2005 году я много занимался шаблонами выражений и различными хитростями времени компиляции для создания библиотек, которые были очень выразительны в использовании, например, для внутренних предметно-ориентированных языков, встроенных в C++. В частности, достаточно полная встроенная функция SQL, похожая на ту, что с тех пор вышла как Linq в.NET.
Для пользователей это нормально. Но для любого, кроме меня, пытающегося поддерживать его, это представляло собой чрезвычайно крутую кривую обучения. Вот в чем проблема с этим; как и любая "умная" техника, она сокращает круг людей, которые могут ее поддерживать.
Это хорошо для широко используемых библиотек классов, которые обычные пользователи никогда не должны понимать. Но для "внутренних" библиотек, принадлежащих определенной группе, им, вероятно, необходимо уметь исправлять или расширять их. По моему опыту, более загадочные возможности шаблонов C++ препятствуют этому.
Это было очень весело, хотя.
Если ваша компания / проект позволяет повысить. Эта книга поможет вам раскрыть некоторую магию повышения только для вашего собственного удовольствия.
Если ваша компания / проект не позволяет повысить. Эта книга станет хорошим руководством для воссоздания некоторых частей буста, которые вам больше всего нужны, например, boost::function.
Я считаю, что в каждом проекте есть какой-то служебный модуль. Такая книга поможет вам сделать вашу "полезность" более общей и безопасной, заимствуя некоторые книги, предлагаемые шаблоны и трюки SFINAE.
И больше всего эта книга покажет, как вы можете переосмыслить некоторые шаблоны проектирования GOF, изменяя полиморфизм времени исполнения со статическим.
- Что я использую прямо из книги? Ничего - я не использую Loki или Boost.
- Повлияло ли это на мой код? Не совсем - я был знаком с концепцией политики, прежде чем я прочитал книгу
- Стоит ли читать? Определенно!
Для меня это был скорее умопомрачительный опыт. Я прочитал книгу и продолжал изучать детали и приемы, некоторые из которых я использовал позже. Но самая важная часть заключается в том, что дизайн с заглавной буквой D обсуждается в книге все время (без каламбура с языком D.)
Глава о "умных указателях" переключает мое мышление "обеспечить все возможные функции" на более консервативный: подумайте, что вы предлагаете, стоит ли это того? как это может сломать код? это поможет пользователю? это сделает код хрупким, создавая тонкие ловушки?
Часть политики, основанной на политике, должна помочь вам понять, можно ли / нужно лучше разделить ваши классы на более мелкие ортогональные единицы. Хотя в большинстве случаев я не заканчиваю деление на все эти классы политики, код обычно оказывается чище, поскольку разные ортогональные фрагменты становятся менее запутанными.
О, как Earwicker, моя первая реакция заключалась в реализации причудливых вещей, которые действительно ускоряли часть разработки, но с другой стороны, в небольшой компании, на которую я работаю, я единственный, кто может поддерживать это, и это действительно проблема. Не переусердствуйте. Требуется вдвое больше мозгов для отладки и поддержки, чем для разработки.
ИМХО, чтение (и понимание!) Первой главы книги полезно (я полагаю, что это даже доступно онлайн бесплатно). Остальная часть книги в значительной степени описывает внутреннюю часть библиотеки Локи, и я не очень рекомендую это.
Я испытывал некоторые грубые реакции со стороны людей, когда я говорил, что использовал вещи из современного дизайна C++. Во-первых, комментарии WTF. Затем последовали комментарии "не пытайтесь быть слишком умными". Тогда лучшее понимание идей. И, наконец, принятие идей до такой степени, что они являются частью общей лексики.
Обязательно храните несколько экземпляров этой книги под рукой. В идеале, купить копию для каждого разработчика. Кроме того, пока этот материал не станет обычным словарём для разработчиков, цитируйте шаблон / идиому и соответствующие страницы в ваших комментариях.
Я не использовал Loki, но я активно использовал повышение на моей предыдущей работе. Boost реализовал много идей из этой прекрасной книги;
Вещи из этой книги не предназначены для использования в Business Logic, они должны быть реализованы в библиотеках (Boost, Loki, что-то свое) и в библиотеках, используемых в Business Logic. Это совсем другое: "использовать эти трюки в коде" или "реализовать отдельную библиотеку с помощью этого трюка и использования красивых библиотек в большей части вашего кода (например, boost::bind - уродливая реализация, но приятная в использовании - но вы почти никогда не увидите эта реализация)
Также эта книга демонстрирует мощное метапрограммирование на С ++ и хорошую тренировку для мозга.