= obj->getA();
std::count(a.begin(),a.end(), 5) == 0)
А зачем?
не выходит в одну строку записать проверку
Ну напиши два ассерта
обновил
о кстати норм капец всрато конечно(
ну лямбда это expression statement
Ну вынеси вектор за ассерт и сделай свое дело
мне это в релизе не нужно
Ну я не думаю что ссылка на вектор получается сложным путем + Я надеюсь компиляторы достаточно умны, чтобы выкинуть неиспользуемую переменную
ну вектор для примера просто
У меня достаточно рук, чтобы бензопила за неиспользуемые переменные ради отладочных проверок
Ну в более сложном случае ок
Чтобы бензопила что?
так не будет варна же
Я обычно читаю код
Код сложнее становится
Используй оператор запятая
да всё читается сложно, я в итоге просто в функцию вынес
Лямбда - хорошо
assert([&](){ const std::vector<Foo> fee = Bar->getFoo(); return std::count(std::begin(fee), std::end(fee), Foo{1,2,3}) != 0; }());
помоему не хорошо
это в первый раз так
а на второй раз оно будет выглядеть лучше assert(IsBarHasFoo(Bar, Foo{1,2,3}))?
а на второй раз ты привыкнешь
() необязательны
лучше assert([&] (auto&& fee) { return std::count(std::begin(fee), std::end(fee), Foo{1,2,3}) != 0; } (Bar->getFoo()))
getFoo имеет невнятную ссылочность, такие переменные лучше передавать в лямбду, а не объявлять внутри - лайфтайм выражения даёт намного меньше возможностей поймать в ногу
не понял, там же у fee нет ссылки
Есть ещё эстетический момент - в такой форме намного очевиднее, какой функции не хватает для нормальной записи мысли в одну строку.
вот это более весомо как-то
Наоборот. Кстати говоря, есть (назовем это ограничение транзитивности), что в сложной системе плохо прыгать через слой абстракции, так что ещё непонятно, что недостаток функций не у Bar
В анналы!
Обсуждают сегодня