Skip to content

Instantly share code, notes, and snippets.

View glensand's full-sized avatar
💭
just code

Gleb Bezborodov glensand

💭
just code
View GitHub Profile

Итераторы

Теоретическая часть и обоснование описаны здесь.

Задание

Добавить итератор к вектору и связному списку, которые мы сделали на прошлых занятиях. Интерфейс должен выглядеть так:

class vector final
{
public:
    class iterator final
@glensand
glensand / 1-small-object-allocator.md
Last active September 26, 2023 11:51
Аллокатор для небольших объектов

Распределитель памяти для небольших объектов

Дисклеймер

Идею и технологию описанную в документе я без зазрений совести позаимствовал в книге А. Александреску. Однако, код, тесты и объяснения мои. Оригинальную реализацию можно найти в библиотеке Loki, различия незначительны, но заметны.

Архитектура

Если это слово можно применить к такой небольшой системе - замечательно, если нет - мне все равно.

Обзор

Реализация очень проста в понимании, но использует не очевидные фишки языка c++ (всего одну, о ней в последнем пункте параграфа). Примечательно то что, даже в такой маленькой системе ужился CQRS. В отличие от системного этот аллокатор является stateful, но из-за особенности его использования, никаких дополнительных телодвижений пользователю делать не приходится,

@glensand
glensand / 1-refactoring.md
Last active February 17, 2021 16:09
Рефакторинг. Введение

Рефакторинг

Эта статья является скорее обзорной и содержит небольшие примеры, более подробно про рефакторинг можно прочитать в замечательной книге Мартина Фаулера "Рефакторинг: улучшение существующего кода". В ней собраны примеры типических рефакторингов с обоснованием их эффективности. Однако, она будет полезна для быстрого старта разработки на c++, и поможет предотвратить некоторые виды ошибок.

Цель

Очень часто разработчики заблуждаются в целях. Рефакторинг призван улучшать качество кода и/или архитектуры, делать его более гибким и более поддерживаемым. Расширение функционала является побочным эффектом. Я делю рефакторинги на уровни, для начала их будет два: микро и макро.

Микрорефакторинг

В общем случае микрорефакторинг не затрагивает архитектуру, например, разделение методов на несколько частей,

@glensand
glensand / template-introduction.md
Last active February 13, 2021 08:56
Введение в шаблоны с++

Шаблон

Вместо введения

Само слово шаблон дает понимание этого механизма. Язык позволяет создавать нечто обобщенное, эксплуатирующее статический полиморфизм, при помощи этого механизма. Равно как и в языках разметки текста, в с++ шаблоны языковых единиц имеют аргументы, которые будут подставлены (инстанциированы). До этого этапа шаблонный код стоит рассматривать как синтаксически (с точки зрения ЯП) верный "текст". На этапе инстанциации аргументы шаблона подставляются как есть, генерируется (условно) код, который может быть скомпилирован в объектный файл.

Аргументы шаблона

с++ на данный момент поддерживает типовые и нетиповые параметры шаблона (и даже лямбда-функции, что бывает крайне полезно). Рассмотрим пример примитивного класса, чьей задачей является хранение значения любого типа (пример максимально упрощен, посему опущены синтаксические фишки и плюшки):

template <typename T>
class ValueHolder