Для
std::set и std::map такая возможность появилась еще в C++14, а для std::unordered_set и std::unordered_map — только в C++20.В новой статье на Хабре Евгений Ерохин, старший разработчик «Лаборатории Касперского», показывает, как эту возможность можно применить в разработке на примере драйвера VirtIO Vsock для KasperskyOS. Изначально драйвер начали писать на C, но по мере усложнения работы с соединениями, списками и счетчиками ссылок перешли на C++. В микроядерной архитектуре KasperskyOS драйвер работает как отдельный процесс, поэтому при его разработке можно использовать возможности стандартной библиотеки C++, включая контейнеры и
shared_ptr.В статье автор показывает, почему двусвязные списки оказались неудобны для этой задачи, как
unordered_set и shared_ptr упростили работу с соединениями и как is_transparent позволил искать нужное соединение прямо по заголовку входящего пакета. Заодно разбирается, почему такой подход помогает сократить количество лишних преобразований и сделать код компактнее и понятнее.➡️Как гетерогенный поиск C++ повлиял на устройство драйвера для KasperskyOS — читайте в полном разборе на Хабре.
