170 похожих чатов

Можно как-то написать assert с несколькими строками? Тип assert(std::vector<int> & a

= obj->getA();
std::count(a.begin(),a.end(), 5) == 0)

33 ответов

21 просмотр

А зачем?

Егор (Дима)- Автор вопроса
Danya🔥
А зачем?

не выходит в одну строку записать проверку

Егор (Дима)- Автор вопроса
Егор (Дима)- Автор вопроса
Constantine Drozdov
напиши лямбду

о кстати норм капец всрато конечно(

Егор (Дима)
обновил

Ну вынеси вектор за ассерт и сделай свое дело

Егор (Дима)- Автор вопроса
Егор (Дима)
мне это в релизе не нужно

Ну я не думаю что ссылка на вектор получается сложным путем + Я надеюсь компиляторы достаточно умны, чтобы выкинуть неиспользуемую переменную

Егор (Дима)- Автор вопроса
Danya🔥
Ну я не думаю что ссылка на вектор получается слож...

У меня достаточно рук, чтобы бензопила за неиспользуемые переменные ради отладочных проверок

Егор (Дима)
ну вектор для примера просто

Ну в более сложном случае ок

Егор (Дима)
так не будет варна же

Код сложнее становится

Егор (Дима)- Автор вопроса
место имение рейверы
Используй оператор запятая

да всё читается сложно, я в итоге просто в функцию вынес

Лямбда - хорошо

Егор (Дима)- Автор вопроса
Alexander Karaev
Лямбда - хорошо

assert([&](){ const std::vector<Foo> fee = Bar->getFoo(); return std::count(std::begin(fee), std::end(fee), Foo{1,2,3}) != 0; }());

Егор (Дима)- Автор вопроса
Егор (Дима)- Автор вопроса
Alexander Karaev
это в первый раз так

а на второй раз оно будет выглядеть лучше assert(IsBarHasFoo(Bar, Foo{1,2,3}))?

Егор (Дима)
assert([&](){ const std::vector<Foo> fee = Bar...

лучше assert([&] (auto&& fee) { return std::count(std::begin(fee), std::end(fee), Foo{1,2,3}) != 0; } (Bar->getFoo()))

Егор (Дима)
assert([&](){ const std::vector<Foo> fee = Bar...

getFoo имеет невнятную ссылочность, такие переменные лучше передавать в лямбду, а не объявлять внутри - лайфтайм выражения даёт намного меньше возможностей поймать в ногу

Егор (Дима)- Автор вопроса
Егор (Дима)
не понял, там же у fee нет ссылки

Есть ещё эстетический момент - в такой форме намного очевиднее, какой функции не хватает для нормальной записи мысли в одну строку.

Егор (Дима)
вот это более весомо как-то

Наоборот. Кстати говоря, есть (назовем это ограничение транзитивности), что в сложной системе плохо прыгать через слой абстракции, так что ещё непонятно, что недостаток функций не у Bar

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта