среда, 4 июня 2025 г.

[prog.c++] Осваиваю C++ные концепты: одна или две константны внутри типа

Недавно довелось столкнутся с задачкой, в которой пользователь должен определить тип с перечнем свойств. Что-то вроде traits из нашего проекта RESTinio. При этом внутри такого типа обязательно должна быть константа high_watermark типа std::size_t. Например:

struct my_traits {
  ... // Какие-то определения типов.

  // Максимальный размер при достижении которого нужно провести чистку данных.
  static constexpr std::size_t high_watermark = 64 * 1024 * 1024;
};

А кроме этого может быть определена и вторая константа, low_watermark. Т.е. класс свойств может выглядеть и так:

struct my_traits {
  ... // Какие-то определения типов.

  // Максимальный размер при достижении которого нужно провести чистку данных.
  static constexpr std::size_t high_watermark = 64 * 1024 * 1024;

  // Размер при достижении которого чистку данных следует остановить.
  static constexpr std::size_t low_watermark = 16 * 1024 * 1024;
};

При использовании таких типов свойств нужно было как-то понять, есть ли в свойствах константа low_watermark. Если есть, то нужно было использовать именно ее значение. А если нет, то оставалось высчитывать нижний порог из high_watermark.

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

Это лучшее, что удалось придумать. К сожалению, в возможностях C++20 пока еще не сильно копенгаген, только учусь. Поэтому интересно, а можно ли было сделать лаконичнее и понятнее?

Полный код под катом, а проверить его можно, например, на Wandbox.

Upd. Под катом так же и второй вариант, более компактный за счет отсутствия одного из концептов и использования if constexpr внутри вспомогательной функции low_watermark.

Upd. Более безопасно использовать std::same_as вместо std::is_same_v.

воскресенье, 1 июня 2025 г.

[life.cinema] Очередной кинообзор (2025/05)

Традиционный обзор отсмотренных за минувший месяц фильмов. Традиционно в начале каждого из списоков то, что понравилось больше, тогда как в конце то, на что можно не тратить свое время. Сразу скажу, что ничего выдающегося не попалось, а упомянутые ниже сериалы лучше бы и не смотреть вовсе.

Фильмы

Багровая отмель (Fear Below, 2025). Очень просто, без изысков, без стремления удивить. Но настолько олдскульно, что получаешь удовольствие. Именно это мне и понравилось, но фильм сам по себе средненький и ничем не выдающийся.

Громовержцы* (Thunderbolts*, 2025). Первые 2/3 мне отлично зашли, т.к. там было столько иронии над супергеройской темой, что я уж подумал, что Марвелл отважилась отстебать своё же супергеройское кино. Потом начался закос под серьезность, что сильно подпортило впечатление, но самый-самый конец и титры чуть-чуть ситуацию выправили. Получился забавный эксперимент, который вполне можно и посмотреть.

Тайна в её глазах (Magpie, 2024). Развязка хорошая, но то, что ей предшествовало выглядело скучным и не вполне естественным.

Источник вечной молодости (Fountain of Youth, 2025). Красочно, динамично, но очень уж все наивно и простенько. Такое ощущение, что это фильм для семейного просмотра с детьми младшего школьного возраста.

Дыхание шторма (Last Breath, 2025). Взяли невероятную историю, подтянули хороших актеров, сделали классную картинку... Но самым интересным и впечатляющим оказались кадры из семейной кинохроники прототипа главного героя, показанные в самом конце. Смотреть можно не потому, что хороший фильм, а потому, что в нем рассказывается про уникальный случай.

Вне юрисдикции (Exterritorial, 2025). Люди честно пытались снять бодренький фильм. Но результат не цепляет. Возможно потому, что в сценах с мордобоем даже мне заметны моменты, где актриса недостаточно убедительна. А из-за этого и происходящее не удается воспринимать всерьез.

Дроп (Drop, 2025). Такой фильм мог бы зацепить, если бы возникло ощущение реальности происходящего. Но такого ощущения не возникло. Какое-то все слишком гламурное и нарочитое. В общем, не зашло.

Объект преследования (Target, 2023). Поначалу было вполне себе нормально. В финале сотворили что-то невообразимое, что основательно подпортило впечатление от кино.

Курьер (El correo, 2024). Вроде бы бодренько. Но не зацепило, как-то шаблонно все.

Под огнем (Warfare, 2025). По шуму вокруг этого фильма ждал сильно большего. Можно сказать, что разочарован. И качеством, и происходящим на экране. Слишком уж много вопросов действия на экране вызывают.

Последний подозреваемый (Zheng jiu xian yi ren, 2023). Редкий маразм + обилие чрезмерного кривляния, характерного для азиатского кино. Смело можно проходить мимо.

Сериалы

Операция "Карпаты" (первый и второй сезоны, 2024). По большей части возникает ощущение "нам втирают какую-то дичь", но зато все динамично, нет сериальной затянутости.

Мосгаз. Дело № 11. Розыгрыш (2025). Не рекомендую. Может быть по уровню маразма и не сравнялись с "Мосгаз. Последнее дело Черкасова", но все равно слишком часто возникало ощущение, что нам втирают какую-то дичь.