Size: a a a

2020 August 02

ЗВ

Захар Виноградов... in supapro.cxx
Егор
И правильно делает, допиши функцию print в классы, которая будет выводить x y, и вызывай ее в цикле
Он ошибку выдает в самой конструкции auto [x,y]
источник

Е

Егор in supapro.cxx
Захар Виноградов
Он ошибку выдает в самой конструкции auto [x,y]
третий раз говорю, это корректное поведение в данном случае
источник

D

Dmitriy in supapro.cxx
Захар Виноградов
Он ошибку выдает в самой конструкции auto [x,y]
В set'e хранятся не пары, а только ключи
источник

ПК

Побитый Кирпич... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
С этим более или менее ясно.
Теперь подскажите, как в плюсах можно реализовать цепочку действий, которая вернёт результат в случае успеха, либо ошибку, если где-то посередине что-то пошло не так.

Ну что-то типа:

 std::optional<int> result;
 do {
   // something
   if (!code1()) { break; }
   // something
   if (!code2()) { break; }
   // something
   if (code3()) { result = get(); }
 } while (false);

 if (result) {
   // success code
 } else {
   // fail code
 }

Только как-то более красиво :)
int foo() {
 do_some1();
 do_some2();
 do_some3();
 return do_some4();
}
источник

ПК

Побитый Кирпич... in supapro.cxx
Самый красивый вариант
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Побитый Кирпич
int foo() {
 do_some1();
 do_some2();
 do_some3();
 return do_some4();
}
А если где-то ошибка в середине?
источник

ПК

Побитый Кирпич... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
А если где-то ошибка в середине?
do_some3 не выполнится, если do_some1 и do_some2 зафейлятся (засчёт выброса исключения). То есть имеем гарантию, что в точке вызова do_some3 выполнены постусловия do_some1 и do_some2
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Побитый Кирпич
do_some3 не выполнится, если do_some1 и do_some2 зафейлятся (засчёт выброса исключения). То есть имеем гарантию, что в точке вызова do_some3 выполнены постусловия do_some1 и do_some2
Исключения я в данном контексте не рассматриваю, это не всегда хороший вариант.
источник

ПК

Побитый Кирпич... in supapro.cxx
Eugene Krasnikov (ᴊɪɴ x)
Исключения я в данном контексте не рассматриваю, это не всегда хороший вариант.
Это идеальный вариант для твоего случая
источник

ЗВ

Захар Виноградов... in supapro.cxx
Егор
третий раз говорю, это корректное поведение в данном случае
Как мне это исправить я не понимаю😥
источник

EK

Eugene Krasnikov (ᴊɪ... in supapro.cxx
Побитый Кирпич
Это идеальный вариант для твоего случая
Смотря для какого. Может, у меня расчёты или ещё что-то, где скорость нужна.
А так это очевидный вариант.
источник

Е

Егор in supapro.cxx
Захар Виноградов
Как мне это исправить я не понимаю😥
Смотри, вот этот синтаксис auto [x,y] это нововведение языка, он грубо говоря раскладывает твою структуру на составные части. Это просто упрощение синтаксиса. То есть вот так ты можешь сделать
struct T {
int x,y;
};
auto [x,y] = T{};

Вот так нет
struct T{
private:
int x,y;
};
auto [x,y] = T{};

потому-что ты не можешь сделать T t; int x = t.x; — это приватные поля, тебе об этом компилятор и говорит.
Чтобы заставить второй пример работать, тебе надо либо сделать поля публичными (ненадо), либо напиши какую-то функцию для вывода аля
void print() const { std::cout << x << ";" << y << std::endl;}

и вызови ее в цикле
for (auto it : numbers) 
  it.print();
источник

SS

Sergey Skvortsov in supapro.cxx
Побитый Кирпич
Это идеальный вариант для твоего случая
Точно ли? Даже если ошибки происходят хоть как-то часто?
источник

ЗВ

Захар Виноградов... in supapro.cxx
Дыааа. Все заработало. Спасибо! Только теперь вопрос чисто теоретический, а в структурах разве не public везде?
источник

Е

Егор in supapro.cxx
Захар Виноградов
Дыааа. Все заработало. Спасибо! Только теперь вопрос чисто теоретический, а в структурах разве не public везде?
в структурах по умолчанию всё public, в классах private
источник

ПК

Побитый Кирпич... in supapro.cxx
Sergey Skvortsov
Точно ли? Даже если ошибки происходят хоть как-то часто?
Если ошибки происходят часто, то что то тут не так
источник

SS

Sergey Skvortsov in supapro.cxx
Побитый Кирпич
Если ошибки происходят часто, то что то тут не так
Ну вот мы валидируем сложную форму от пользователя / парсим исходник на сложном яп (плюсах) / etc
Отлично попадает в приведенный пример, более того, в обсуждаемом фрагменте кода с tl::optional там как раз похожее происходит
источник

ПК

Побитый Кирпич... in supapro.cxx
Sergey Skvortsov
Ну вот мы валидируем сложную форму от пользователя / парсим исходник на сложном яп (плюсах) / etc
Отлично попадает в приведенный пример, более того, в обсуждаемом фрагменте кода с tl::optional там как раз похожее происходит
И где тут частота? Это ошибка раз в минуту максимум
источник

SS

Sergey Skvortsov in supapro.cxx
Кек
источник

SS

Sergey Skvortsov in supapro.cxx
Форма сложная, куча полей, а у нас нагрузка большая
источник