Pull to refresh
32
37
Данил Сидорук @eoanermine

Плюсовик. Организатор C++ Moscow

Send message

Реализуем эффективный тупль с помощью C++26

Level of difficultyMedium
Reading time7 min
Views9.1K

Свет видел много любительских реализаций std::tuple, и реализация своих велосипедов — наверное, это действительно действенный способ обучения: вряд-ли можно сказать, что ты что-то по-настоящему понимаешь, если не можешь объяснить, как это что-то устроено.

Многие пытливые умы на протяжении десятилетий задавались вопросом: как же реализован std::tuple, как мне реализовать свой тупль (кортеж)? [1]

И немало было дано ответов на такие вопросы и написано статей ([2]). Однако я берусь утверждать, что все они имеют один фатальный недостаток! Конкретнее, они все рассматривают в основном лишь один (и при этом неэффективный) способ реализации: с помощью множественного наследования или рекурсивного инстанцирования, имеющий в свой очередь множество своих недостатков, главный из которых — неэффективное использование памяти.

В то время как современный C++ позволяет реализовать тупль гораздо проще (без обилия шаблоноты) и эффективнее.

Войти в мир эффективных реализаций туплей
Total votes 33: ↑30 and ↓3+37
Comments69

Какой тип ordering должен возвращать мой operator<=> в C++?

Level of difficultyEasy
Reading time3 min
Views4.3K

На Хабре было опубликовано уже достаточно статей, посвященных «spaceship operator» operator<=> ([1], [2], [3], [4]) И этой статьи бы не было, если бы все они были идеальны и описывали его во всей полноте. Но ни одна из них в деталях не рассказывает: а какой тип, собственно, должен возвращать наш operator<=>, если мы реализуем его своими руками: std::strong_ordering, std::weak_ordering или std::partial_ordering? И какая вообще между ними разница?

Читать далее
Total votes 12: ↑11 and ↓1+14
Comments10

Многообразие функциональных обёрток

Level of difficultyMedium
Reading time5 min
Views3.5K

В далёком 2002-ом комитет по стандартизации C++ посетил пропозал, предлагавший ввести шаблонный класс, некий обобщенный «указатель на функцию», способный работать как с простыми указателями на функции, указателями на методы классов, так и с произвольными функциональными объектами [1].

В качестве мотивации к принятию он приводил несколько весомых юзкейсов: колбэки и функции высших порядков.

Кто же знал, что его окажется недостаточно, а один из его юзкейсов — вовсе не его юзкейс?

Читать далее
Total votes 14: ↑14 and ↓0+14
Comments6

C++ Дайджест №7 (30 октября – 12 ноября 2023)

Level of difficultyEasy
Reading time2 min
Views4.4K

Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов из мира C++ за последние две недели.

Приятного чтения!

Читать далее
Total votes 11: ↑10 and ↓1+12
Comments0

C++ Дайджест №6 (16 октября – 29 октября 2023)

Level of difficultyEasy
Reading time3 min
Views3.6K

Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов из мира C++ за последние две недели.

Приятного чтения!

Читать далее
Total votes 8: ↑8 and ↓0+8
Comments1

C++ Дайджест №5 (2 октября – 15 октября 2023)

Level of difficultyEasy
Reading time3 min
Views3.2K

Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов из мира C++ за последние две недели.

Приятного чтения!

Читать далее
Total votes 11: ↑10 and ↓1+11
Comments3

C++ Дайджест №4 (18 сентября – 1 октября 2023)

Level of difficultyEasy
Reading time3 min
Views3.9K

Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов из мира C++ за последние две недели.

Приятного чтения!

Читать далее
Total votes 14: ↑13 and ↓1+17
Comments0

C++ Дайджест №3 (4 сентября – 17 сентября 2023)

Level of difficultyEasy
Reading time4 min
Views4.3K

Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов из мира C++ за последние две недели.

Приятного чтения!

Читать далее
Total votes 14: ↑14 and ↓0+14
Comments0

C++ Дайджест №2 (21 августа 2023 – 3 сентября 2023)

Level of difficultyEasy
Reading time4 min
Views7.3K

Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов из мира C++ за последние две недели.

Приятного чтения!

Читать далее
Total votes 19: ↑18 and ↓1+26
Comments0

C++ Дайджест №1 (7 августа 2023 – 20 августа 2023)

Level of difficultyEasy
Reading time4 min
Views4.6K

Привет, Хабр! Сегодня я хочу вам представить подборку интересных новостей и материалов из мира C++ за последние две недели.

Приятного чтения!

Читать далее
Total votes 24: ↑24 and ↓0+24
Comments0

C++ Дайджест #0 (24 июля 2023 – 6 августа 2023)

Reading time3 min
Views4K

Привет, Хабр! Сегодня я хочу представить вам подборку интересных новостей и материалов из мира C++.

Это пилотный выпуск, так что любые советы, отзывы и рекомендации, как сделать наш дайджест лучше, в комментариях к статье или же напрямую мне в личные сообщения (habr, tg) приветствуются!

Приятного чтения!

Читать далее
Total votes 17: ↑15 and ↓2+17
Comments3

Как вывести форматированный текст на экран в C++

Level of difficultyMedium
Reading time4 min
Views8.6K

Рано или поздно у каждого программиста появляется желание вывести форматированный текст на экран. Немудрено, у пляшущих на экране буковок есть свой неповторимый шарм, а факт форматированности добавляет им еще и загадочности — мы можем даже не догадываться, что в точности будет напечатано.

Но как сделать это оптимально и кроссплатформенно? Читайте в нашей статье!

Читать далее
Total votes 17: ↑15 and ↓2+20
Comments12

Краткий обзор нововведений C++23: deducing this

Level of difficultyMedium
Reading time6 min
Views19K

Документ «deducing this», принятый в последний стандарт C++, вводит новый, третий тип методов классов, сочетающий в себе свойства двух уже существующих: нестатических и статических, открывающий перед нами новые горизонты:

1. Дедупликация большого количества кода.

2. Вытеснение CRTP (Curiously Recuring Template Pattern) на свалку истории, его замена более простой и очевидно понятной записью.

3. Рекурсивные лямбды.

И другое.

Но прежде чем рассмотреть само нововведение и его практические применения, углубимся немного в историю и попытаемся понять, почему в нем собственно возникла необходимость.

Читать далее
Total votes 52: ↑52 and ↓0+52
Comments64

Введение в метаклассы

Reading time5 min
Views12K

В стандартной библиотеке языка программирования C++ существует много классов, наделенных если не абсолютно одинаковыми свойствами, то очень похожими.

Так, стандарт вводит отдельное требование BitmaskType, описывающее свойства, какими должны обладать битовые маски в стандартной библиотеке: для них должен быть определены операции «и», «или», «не», а значение 0 должно представлять пустую маску.

В стандартной библиотеке классов, от которых требуется соблюдение этого требования, очень много: std::chars_format, std::launch, std::filesystem::perms, std::filesystem::perm_options, std::filesystem::copy_options, std::filesystem::directory_options... Единственное, чем они отличаются — это набором возможных значений. Реализации же битовых операций над ними похожи как две капли воды.

В данной статье мы поговорим о том, как такое средство как метаклассы в некоторых случаях способно спасти программиста от написания простынь бойлерплейта.

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments15

Information

Rating
180-th
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity

Specialization

Software Developer, Backend Developer
C++
Git
OOP
Algorithms and data structures