По ссылке на isocpp.org наткнулся на серию статей "Code reuse series" в блоге "Modern Maintainable Code". Имхо, для тех, кто в свое время не штудировал Джосаттиса, Вандервуда, Александреску, Мейерса и Саттера или же штудировал их очень давно, имеет смысл прочитать эти статьи. В них рассказывается о том, как использовать перегрузку и шаблоны (в том числе различные варианты специализации шаблонов) для того, чтобы адаптировать свои функции/классы под разные условия. Например, как получить функцию getNthElement(), учитывающую тип контейнера, из которого нужно достать элемент по порядковому номеру. Или как std::unique_ptr удается работать правильно с разными типами ресурсов.
Статьи довольно объемные, на английском. Но читаются без проблем. Хотя, если знания C++ не очень хорошие, то могут быть некоторые сложности с восприятием технической части материала. Ну в этом случае тем более имеет смысл их прочитать, дабы подтянуть свои знания C++.
Вот перечень статей в хронологическом порядке:
- A Roadmap
- The basics of type-dependent code reuse (solution)
- Two fundamental implementations for one conceptual task
- Two fundamental implementations for one conceptual task (solution)
- Two fundamental implementations for one conceptual object
- Two fundamental implementations for one conceptual object (solution)
- When half is the same and half is different
Еще в догонку к этим статьям могу порекомендовать статью из того же блога "A corollary on overloading". Хотя я сам там далеко не со всем согласен (например, с запретом делать перегрузку стандартых функций для своих типов в пространстве имен std::, имхо, для std::swap именно так и нужно делать). Но прочитать имеет смысл. Полагаю, тема пересекается с тем, что пару дней назад обсуждалось у меня в блоге (#1, #2).
PS. ИМХО, перечисленные выше статьи отлично показывают, с какими именно проблемами сейчас сталкиваются C++ разработчики. Это отнюдь не повисшие указатели, расстрелянная память или ее утечки. Актуальность этих древних проблем, имхо, за последние годы сильно снизилась. А вот как разобраться в современных возможностях такого мощного языка, как C++11/14, как выбрать наилучший баланс между эффективностью/запутанностью -- вот это сейчас более актуально.
Комментариев нет:
Отправить комментарий