Теоретическая часть и обоснование описаны здесь.
Добавить итератор к вектору и связному списку, которые мы сделали на прошлых занятиях. Интерфейс должен выглядеть так:
class vector final
{
public:
class iterator final
Теоретическая часть и обоснование описаны здесь.
Добавить итератор к вектору и связному списку, которые мы сделали на прошлых занятиях. Интерфейс должен выглядеть так:
class vector final
{
public:
class iterator final
Идею и технологию описанную в документе я без зазрений совести позаимствовал в книге А. Александреску. Однако, код, тесты и объяснения мои. Оригинальную реализацию можно найти в библиотеке Loki, различия незначительны, но заметны.
Если это слово можно применить к такой небольшой системе - замечательно, если нет - мне все равно.
Реализация очень проста в понимании, но использует не очевидные фишки языка c++ (всего одну, о ней в последнем пункте параграфа). Примечательно то что, даже в такой маленькой системе ужился CQRS. В отличие от системного этот аллокатор является stateful, но из-за особенности его использования, никаких дополнительных телодвижений пользователю делать не приходится,
Эта статья является скорее обзорной и содержит небольшие примеры, более подробно про рефакторинг можно прочитать в замечательной книге Мартина Фаулера "Рефакторинг: улучшение существующего кода". В ней собраны примеры типических рефакторингов с обоснованием их эффективности. Однако, она будет полезна для быстрого старта разработки на c++, и поможет предотвратить некоторые виды ошибок.
Очень часто разработчики заблуждаются в целях. Рефакторинг призван улучшать качество кода и/или архитектуры, делать его более гибким и более поддерживаемым. Расширение функционала является побочным эффектом. Я делю рефакторинги на уровни, для начала их будет два: микро и макро.
В общем случае микрорефакторинг не затрагивает архитектуру, например, разделение методов на несколько частей,
Само слово шаблон дает понимание этого механизма. Язык позволяет создавать нечто обобщенное, эксплуатирующее статический полиморфизм, при помощи этого механизма. Равно как и в языках разметки текста, в с++ шаблоны языковых единиц имеют аргументы, которые будут подставлены (инстанциированы). До этого этапа шаблонный код стоит рассматривать как синтаксически (с точки зрения ЯП) верный "текст". На этапе инстанциации аргументы шаблона подставляются как есть, генерируется (условно) код, который может быть скомпилирован в объектный файл.
с++ на данный момент поддерживает типовые и нетиповые параметры шаблона (и даже лямбда-функции, что бывает крайне полезно). Рассмотрим пример примитивного класса, чьей задачей является хранение значения любого типа (пример максимально упрощен, посему опущены синтаксические фишки и плюшки):
template <typename T>
class ValueHolder