HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Как не потерять контекст при выходе из цикла? (https://hlfx.ru/forum/showthread.php?threadid=6117)
Отправлено Crystallize 25-12-2024 в 14:01:
Как не потерять контекст при выходе из цикла?
В общем ситуация такая: у вас есть цикл с кодом который анализирует диапазон значений или список энтитей скажем. Это может быть даже и не цикл а какой-нибудь while (true) в котором творится всё что угодно. Суть в том что этот участок кода можно покинуть либо в результате неудачи (бегунок вышел за верхнюю или нижнюю границу) либо в результате удачи, когда мы нашли то что искали. Но как передать этот контекст при выходе из цикла? По удаче или по неудаче мы вышли?
Ноль я зачастую не могу использовать в качестве флага ошибки потому что для сенсора в пространстве, ноль это легитимное значение. Я конечно могу при неудаче записать в исходящую переменную -99999 или NaN (как я делал в враде) и потом чекнуть, или вообще сделать булевую переменную-флаг (как я тоже делал в враде) но может есть более элегантные пути?
Отправлено nemyax 25-12-2024 в 15:35:
Договорись сам с собой о кодах результата, да и возвращай их.
Добавлено 25-12-2024 в 18:35:
Цитата:
Crystallize писал:
Ноль я зачастую не могу использовать в качестве флага ошибки потому что для сенсора в пространстве, ноль это легитимное значение.
Так ты не возвращай значение, а пиши его в inout-аргумент своей функции. А ретурном отдавай только код результата.
Отправлено Дядя Миша 25-12-2024 в 15:43:
Цитата:
Crystallize писал:
бегунок вышел за верхнюю или нижнюю границу
Кто вышел? 
Цитата:
Crystallize писал:
конечно могу при неудаче записать в исходящую переменную -99999 или NaN (как я делал в враде) и потом чекнуть, или вообще сделать булевую переменную-флаг (как я тоже делал в враде) но может есть более элегантные пути?
Запиши -1.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Crystallize 25-12-2024 в 17:19:
Дядя Миша не всегда можно -1, что если я работаю с координатой?
Добавлено 26-12-2024 в 00:19:
Цитата:
Дядя Миша писал:
Кто вышел?
источник трейсов
Отправлено FiEctro 25-12-2024 в 17:47:
C++ Source Code:
11 | Status status; // Статус обработки |
12 | double x; // Координата X |
13 | double y; // Координата Y |
16 | Result processCoordinates() { |
17 | for (int i = 0; i < 100; ++i) { |
21 | if (x > 20 && y > -20) { // Удача |
22 | return {Status::Success, x, y}; |
25 | if (x < -50 || y < -50) { // Вышли за пределы |
26 | return {Status::OutOfBounds, x, y}; |
29 | return {Status::InvalidData, 0.0, 0.0}; // Некорректные данные |
33 | auto result = processCoordinates(); |
34 | if (result.status == Status::Success) { |
35 | std::cout << "Success: (" << result.x << ", " << result.y << ")\n"; |
36 | } else if (result.status == Status::OutOfBounds) { |
37 | std::cout << "Failure: Out of bounds (" << result.x << ", " << result.y << ")\n"; |
39 | std::cout << "Failure: Invalid data\n"; |
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Дядя Миша 26-12-2024 в 06:57:
Crystallize ну тада делай как Нёмыч сказал.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено SNMetamorph 26-12-2024 в 10:37:
Re: Как не потерять контекст при выходе из цикла?
Цитата:
Crystallize писал:
Ноль я зачастую не могу использовать в качестве флага ошибки потому что для сенсора в пространстве, ноль это легитимное значение. Я конечно могу при неудаче записать в исходящую переменную -99999 или NaN (как я делал в враде) и потом чекнуть, или вообще сделать булевую переменную-флаг (как я тоже делал в враде) но может есть более элегантные пути?
Буквально для этого существует std::optional. Ну ты можешь свой аналог на шаблонах очень легко написать, если нет желания или возможности тянуть STL свежий. Либо же, если тебе где-то на уровнях выше тебе прямо конкретно нужно знать, что за ошибка произошла, то смотри в сторону std::expected (увы, он есть только начиная с C++23, так что тут придётся ручками аналог делать)__________________
Мой сайт
Xash3D Modding Discord
Отправлено Дядя Миша 26-12-2024 в 10:57:
Цитата:
SNMetamorph писал:
Буквально для этого существует std::optional
а потом мы удивляемся чего программы тормозят и столько места занимают.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено SNMetamorph 26-12-2024 в 11:00:
Цитата:
Дядя Миша писал:
а потом мы удивляемся чего программы тормозят и столько места занимают.
Это абсолютно то же самое, что отдельно иметь переменную и булевый флажок под индикацию того, установлено там значение или нет, отличие лишь в более удобном интерфейсе и меньшем количестве кода соответственно. Итоговый размер объекта это sizeof(T) + sizeof(bool)__________________
Мой сайт
Xash3D Modding Discord
Отправлено Дядя Миша 26-12-2024 в 15:52:
SNMetamorph сперва потянем весь STL, потом Boost, потом миллион чужих библиотек и всё. Начинают-то с лёгких наркотиков.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 26-12-2024 в 16:00:
Цитата:
Дядя Миша писал:
сперва потянем весь STL, потом Boost
boost::outcome 
__________________
Отправлено SNMetamorph 26-12-2024 в 18:39:
STL тут и не нужна. Свой optional/expected с нуля на коленке пишется в 40-50 строчек.
__________________
Мой сайт
Xash3D Modding Discord
Отправлено FiEctro 27-12-2024 в 06:14:
Цитата:
Дядя Миша писал:
SNMetamorph сперва потянем весь STL, потом Boost, потом миллион чужих библиотек и всё. Начинают-то с лёгких наркотиков.
Ты же вроде сам хочешь винформы в ксаш тянуть убивая кроссплатформенность
Да и чем stl то не угодил?__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
Отправлено Дядя Миша 27-12-2024 в 06:38:
Цитата:
FiEctro писал:
Ты же вроде сам хочешь винформы в ксаш тянуть убивая кроссплатформенность
Так это только для редактора. Редакторы исторически только под винду делаются. Ну впрочем, через WINE-то всё прекрасно работает, так что какая разница.
Добавлено 27-12-2024 в 09:38:
Цитата:
SNMetamorph писал:
Свой optional/expected с нуля на коленке пишется в 40-50 строчек.
Во-во, я и говорю, для разруливания простейшей ситуации - шаблон на 40 строк, зашибись.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено FiEctro 27-12-2024 в 06:41:
Цитата:
Дядя Миша писал:
Редакторы исторически только под винду делаются.
Ну может разве что во времена динозавров.
Цитата:
Дядя Миша писал:
Ну впрочем, через WINE-то всё прекрасно работает, так что какая разница.
Особенно со сложными сценами в 1фпс
. Ну вайн так вайн.__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!