HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Как не потерять контекст при выходе из цикла?
Можно ли это решить без хаков
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4672
Возраст: 35

Рейтинг



Post Как не потерять контекст при выходе из цикла?

В общем ситуация такая: у вас есть цикл с кодом который анализирует диапазон значений или список энтитей скажем. Это может быть даже и не цикл а какой-нибудь while (true) в котором творится всё что угодно. Суть в том что этот участок кода можно покинуть либо в результате неудачи (бегунок вышел за верхнюю или нижнюю границу) либо в результате удачи, когда мы нашли то что искали. Но как передать этот контекст при выходе из цикла? По удаче или по неудаче мы вышли?

Ноль я зачастую не могу использовать в качестве флага ошибки потому что для сенсора в пространстве, ноль это легитимное значение. Я конечно могу при неудаче записать в исходящую переменную -99999 или NaN (как я делал в враде) и потом чекнуть, или вообще сделать булевую переменную-флаг (как я тоже делал в враде) но может есть более элегантные пути?

Сообщить модератору | IP: Записан
Сообщение: 222879

Старое сообщение 25-12-2024 14:01
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4191

Рейтинг



Договорись сам с собой о кодах результата, да и возвращай их.

Добавлено 25-12-2024 в 18:35:

Цитата:
Crystallize писал:
Ноль я зачастую не могу использовать в качестве флага ошибки потому что для сенсора в пространстве, ноль это легитимное значение.

Так ты не возвращай значение, а пиши его в inout-аргумент своей функции. А ретурном отдавай только код результата.

Сообщить модератору | IP: Записан
Сообщение: 222880

Старое сообщение 25-12-2024 15:35
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32804
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
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'

Сообщить модератору | IP: Записан
Сообщение: 222882

Старое сообщение 25-12-2024 15:43
-
Crystallize
Житель форума

Дата регистрации: Jul 2007
Проживает: Новосибирск
Сообщений: 4672
Возраст: 35

Рейтинг



Дядя Миша не всегда можно -1, что если я работаю с координатой?

Добавлено 26-12-2024 в 00:19:

Цитата:
Дядя Миша писал:
Кто вышел?

источник трейсов

Сообщить модератору | IP: Записан
Сообщение: 222884

Старое сообщение 25-12-2024 17:19
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13395
Возраст: 33

Рейтинг



C++ Source Code:
1
#include <iostream>
2
#include <utility>
3
 
4
enum class Status {
5
  Success,
6
  OutOfBounds,
7
  InvalidData
8
};
9
 
10
struct Result {
11
  Status status;      // Статус обработки
12
  double x;           // Координата X
13
  double y;           // Координата Y
14
};
15
 
16
Result processCoordinates() {
17
  for (int i = 0; i < 100; ++i) {
18
    double x = i * 0.5;
19
    double y = i * -0.5;
20
 
21
    if (x > 20 && y > -20) { // Удача
22
      return {Status::Success, x, y};
23
  }
24
 
25
  if (x < -50 || y < -50) { // Вышли за пределы
26
    return {Status::OutOfBounds, x, y};
27
}
28
}
29
return {Status::InvalidData, 0.0, 0.0}; // Некорректные данные
30
}
31
 
32
int main() {
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";
38
  } else {
39
    std::cout << "Failure: Invalid data\n";
40
  }
41
}
42
 

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 25-12-2024 в 17:51

Сообщить модератору | IP: Записан
Сообщение: 222886

Старое сообщение 25-12-2024 17:47
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32804
Нанёс повреждений: 392 ед.

Рейтинг



Crystallize ну тада делай как Нёмыч сказал.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 222895

Старое сообщение 26-12-2024 06:57
-
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 595

Рейтинг



Re: Как не потерять контекст при выходе из цикла?

Цитата:
Crystallize писал:

Ноль я зачастую не могу использовать в качестве флага ошибки потому что для сенсора в пространстве, ноль это легитимное значение. Я конечно могу при неудаче записать в исходящую переменную -99999 или NaN (как я делал в враде) и потом чекнуть, или вообще сделать булевую переменную-флаг (как я тоже делал в враде) но может есть более элегантные пути?


Буквально для этого существует std::optional. Ну ты можешь свой аналог на шаблонах очень легко написать, если нет желания или возможности тянуть STL свежий. Либо же, если тебе где-то на уровнях выше тебе прямо конкретно нужно знать, что за ошибка произошла, то смотри в сторону std::expected (увы, он есть только начиная с C++23, так что тут придётся ручками аналог делать)

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord

Отредактировано SNMetamorph 26-12-2024 в 10:41

Сообщить модератору | IP: Записан
Сообщение: 222901

Старое сообщение 26-12-2024 10:37
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32804
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
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'

Сообщить модератору | IP: Записан
Сообщение: 222904

Старое сообщение 26-12-2024 10:57
-
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 595

Рейтинг



Цитата:
Дядя Миша писал:
а потом мы удивляемся чего программы тормозят и столько места занимают.

Это абсолютно то же самое, что отдельно иметь переменную и булевый флажок под индикацию того, установлено там значение или нет, отличие лишь в более удобном интерфейсе и меньшем количестве кода соответственно. Итоговый размер объекта это sizeof(T) + sizeof(bool)

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord

Отредактировано SNMetamorph 26-12-2024 в 11:11

Сообщить модератору | IP: Записан
Сообщение: 222906

Старое сообщение 26-12-2024 11:00
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32804
Нанёс повреждений: 392 ед.

Рейтинг



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'

Сообщить модератору | IP: Записан
Сообщение: 222911

Старое сообщение 26-12-2024 15:52
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34799
Нанёс повреждений: 514 ед.
Возраст: 38

Рейтинг



Награды
 
[1 награда]


Цитата:
Дядя Миша писал:
сперва потянем весь STL, потом Boost

boost::outcome

__________________

Сообщить модератору | IP: Записан
Сообщение: 222913

Старое сообщение 26-12-2024 16:00
-
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 595

Рейтинг



STL тут и не нужна. Свой optional/expected с нуля на коленке пишется в 40-50 строчек.

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord

Сообщить модератору | IP: Записан
Сообщение: 222921

Старое сообщение 26-12-2024 18:39
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13395
Возраст: 33

Рейтинг



Цитата:
Дядя Миша писал:
SNMetamorph сперва потянем весь STL, потом Boost, потом миллион чужих библиотек и всё. Начинают-то с лёгких наркотиков.



Ты же вроде сам хочешь винформы в ксаш тянуть убивая кроссплатформенность Да и чем stl то не угодил?

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 27-12-2024 в 06:16

Сообщить модератору | IP: Записан
Сообщение: 222923

Старое сообщение 27-12-2024 06:14
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32804
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
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'

Сообщить модератору | IP: Записан
Сообщение: 222928

Старое сообщение 27-12-2024 06:38
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13395
Возраст: 33

Рейтинг



Цитата:
Дядя Миша писал:
Редакторы исторически только под винду делаются.


Ну может разве что во времена динозавров.

Цитата:
Дядя Миша писал:
Ну впрочем, через WINE-то всё прекрасно работает, так что какая разница.


Особенно со сложными сценами в 1фпс . Ну вайн так вайн.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | IP: Записан
Сообщение: 222929

Старое сообщение 27-12-2024 06:41
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 02:05. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Как не потерять контекст при выходе из цикла?
Можно ли это решить без хаков
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024