Найти в Дзене
Указатели на функции в C++ - от котов к стратегиям
Представь, что ты шеф-повар. У тебя есть поваренная книга, и вместо того чтобы переписывать рецепт «Пасты Карбонара» каждый раз, когда приходит гость, ты просто кладешь в книгу закладку с номером страницы. Указатели на функции — это и есть такие закладки в коде. Они хранят не сами данные, а адрес действия, которое нужно выполнить. Звучит страшновато? На самом деле это просто суперсила, которая делает твой код гибким, как йог. Погнали разбираться! 1. Самые простые: Закладки на рецепты Допустим, у тебя есть простая функция — «позвать кота по имени»: #include <iostream> void callCatByName(int fishCount)...
1 неделю назад
Идиома CRTP в C++ для тех, кто хочет кода на шаблонах со скоростью света
Привет, подписчик! Если ты читаешь это, значит, ты уже перешагнул рубеж «Hello, World» и начал задумываться о том, как писать не просто рабочий, а быстрый и элегантный код на C++ . Сегодня мы разберем одну из самых хитрых, но невероятно полезных идиом языка. Называется она CRTP - это секретный ингредиент в рецептах высокопроизводительных библиотек и игровых движков. Представь, что ты проектируешь иерархию классов. У тебя есть базовый класс Животное с методом податьГолос() . А от него наследуюются Кошка и Собака . В классическом объектно-ориентированном программировании (ООП) мы бы сделали...
2 недели назад
Магия Pimpl в C++: Как спрятать скелеты в шкафу и ускорить компиляцию
Представь, что ты строишь дом. Ты показываешь друзьям красивый фасад и входную дверь (это твой интерфейс), но никто не видит, какие трубы торчат у тебя в коридоре или насколько криво висят розетки на кухне (это твоя реализация ). В идеальном мире код должен работать так же: пользователь класса видит только то, что ему нужно, а все внутренности надежно спрятаны. В C++ для этого есть крутой трюк под названием Pimpl (читается как "пимпл", от английского "Pointer to Implementation" — указатель на реализацию). Это как суперспособность, которая делает твой код чище, а компиляцию — быстрее. Давай разберемся, как это работает, на понятных примерах...
2 недели назад
Идиома Tag Dispatching в C++: Компилятор как диспетчер задач
Представьте, что вам нужно написать универсальную функцию, которая должна работать по-разному для разных типов данных, но при этом не тратить время на проверки во время выполнения. Именно эту проблему решает идиома Tag Dispatching (диспетчеризация по тегам). Tag Dispatching — это идиома, использующая пустые типы-теги (dummy tags) и перегрузку функций для выбора оптимальной реализации алгоритма на этапе компиляции. Вместо проверок if constexpr или RTTI, мы передаем функции "пустышку" — объект типа, который несет исключительно смысловую нагрузку. Компилятор видит разные типы и автоматически вызывает нужную перегрузку...
2 недели назад
Идиома Copy-and-Swap в C++: Пишем безопасный оператор присваивания правильно
Поговорим об одной из интересных идиом в C++ — Copy-and-Swap. Если вы когда-нибудь писали класс, который управляет ресурсами (памятью, файлами или сокетами), вы наверняка сталкивались с головной болью под названием «перегрузка оператора присваивания». Хочется сделать его надежным, безопасным и не облажаться с исключениями. Copy-and-Swap — это элегантный способ решить эти проблемы раз и навсегда. Copy-and-Swap (или «копируй и обменяй») — это не просто трюк, а настоящий джентльменский набор для оператора operator=. Идея до безобразия проста: 1. Копируем — создаем временную копию объекта, который присваиваем...
3 недели назад
Если нравится — подпишитесь
Так вы не пропустите новые публикации этого канала