HLFX.Ru Forum
Показать все 15 сообщений этой темы на одной странице

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:

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

В общем ситуация такая: у вас есть цикл с кодом который анализирует диапазон значений или список энтитей скажем. Это может быть даже и не цикл а какой-нибудь 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:
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
 

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


Отправлено Дядя Миша 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

__________________

xaerox on Vivino


Отправлено 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фпс . Ну вайн так вайн.

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


Временная зона GMT. Текущее время 23:40.
Показать все 15 сообщений этой темы на одной странице

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