SFINAE (Substitution Failure Is Not An Error) — это одна из самых мощных и менее известных техник в C++, которая позволяет выбирать, какие функции должны быть скомпилированы, на основе доступности определенных типов или выражений.
•
SFINAE позволяет автоматически исключать функции из компиляции, если параметры или выражения не соответствуют определенным условиям. Это достигается с помощью специальных инструментов, таких как std::enable_if
.•
В примере выше используются std::enable_if_t
и std::is_integral_v
для выбора функции, которая будет скомпилирована, на основе типа передаваемого аргумента.•
SFINAE делает код более универсальным и позволяет использовать единую функцию для обработки различных типов данных, выбирая правильную реализацию на этапе компиляции.Please open Telegram to view this post
VIEW IN TELEGRAM
В многопоточных приложениях иногда требуется лениво инициализировать ресурсы, гарантируя, что это произойдет только один раз, даже если несколько потоков пытаются сделать это одновременно.
std::call_once
.Please open Telegram to view this post
VIEW IN TELEGRAM
•
Параметром шаблона могут быть конкретные целые числа.•
Параметром шаблона также могут быть конкретные функции.•
Это позволяет компилятору встраивать вызовы для этих функций в коде инстанцированного шаблона для более эффективного выполнения.•
В примере ниже, функция memoize()
в качестве шаблонного параметра получает функцию и вызывает эту функцию для новых значений аргумента.•
Старое сохранённое значение аргумента берётся из кеша.Please open Telegram to view this post
VIEW IN TELEGRAM
Итераторы-адаптеры - это классы, которые оборачивают стандартные итераторы и предоставляют дополнительные возможности или изменяют их поведение.
•
Итераторы-адаптеры предоставляют дополнительные возможности для работы с итераторами, такие как итерация в обратном порядке или фильтрация элементов.•
Использование итераторов-адаптеров позволяет упростить код и делает его более читаемым за счет высокоуровневого интерфейса.•
Итераторы-адаптеры добавляют гибкость в работу с контейнерами, позволяя выполнять сложные операции и манипуляции с элементами.Please open Telegram to view this post
VIEW IN TELEGRAM