Комментарии 8
defer - штука хорошая на общий случай, но для частных лучше написать своие RAII объекты. тогда
mutex::acquire(m);
defer (mutex::release(m));
Превратится в
mutex::lock lock(m);
Да, нужно писать по своему lock на каждый случай, но зато на строку меньше, не нужен макрос и точно невозможно забыть освободить. defer можно забыть написать, а c одной строкой ошибки уже не будет
Спасибо за интересную статью!
Но позволю себе позанудствовать: на моей памяти "Си-с-классами" было принято называть C++ до появления в нем шаблонов. У вас же шаблоны используются вполне себе активно, местами только они и используются ;)
Так что вы описали вполне себе modern C++, особенно вот в этом фрагменте (а ведь многие еще себе и C++17 позволить не могут):
namespace furi::mutex {
constexpr inline auto& acquire = ::furi_mutex_acquire;
}
а не "Си-с-классами".
Впрочем, полезность и интересность статьи это никак не умаляет.
Для того, чтобы не писать в каждой строчке
constexpr inline auto&
, я определил для этого макросFURI_HH_ALIAS
.
Мне кажется, что польза от подобных макросов, если вы планируете компилировать код там где есть и где нет constexpr. Макросы только для экономии десятка нажатий клавиш, IMO, замусоривают код и ухудшают читабельность. Хотя если это проект для себя, то неважно
Спасибо за статью, мне кажется, что C++-почти без классов - это прекрасно.
Я так и не понял, что в итоге автор хотел написать или написал.
Какую недостающую фичу Флиппера он пытался реализовать.
Как и почему я писал для Флиппера на Си-с-классами