Войти
Arctic EngineФорум

Нужна помощь в разработке (4 стр)

Страницы: 13 4 5 69 Следующая »
#45
10:06, 7 мая 2022

Huldra
> Если значение за пределами диапазона значений enum будет скастовано к enum,
> будет UB.
Если сделать

MyClass *my_class = nullptr;
my_class->method();

То произойдёт УБ. Запретишь теперь методы? Логика то точно такая-же. И пример кода тоже.

modmaker1
> Если ты конвертируешь в enum рандомные данные, то надо делать проверку на их
> валидность.
> Мне кажется, со всеми этими перделками, навроде static_cast, проггеры забыли,
> что значит кодить тщательно.
> Для проверки соответствия рандомных данных валидному значению потребуется
> runtime проверка. static_cast тут просто ничем не может помочь.
Вообще умные люди придумали всякие protobuf, чтобы автоматически читать из файла и проверять на соответствие.

ТС же просто не умеет код нормально писать.

Известно же что енам это гарантия того, что значение может быть только одним из перечисленных. Он же просто делает static_cast в енам не проверив его значение. И после того как C++ показывает что подобный говнокод УБ, ТС решает что енамы зло и уб.

#46
(Правка: 11:48) 11:48, 7 мая 2022

samrrr
> Известно же что енам это гарантия того, что значение может быть только одним из
> перечисленных.
Вот в этом разница между enum и enum class, насколько я понимаю. Ты описываешь enum class, а просто enum в C++ это тип позволяющий вместить любое из значений enum и набор констант, которые для удобства можно использовать вместо чисел.

#47
12:21, 7 мая 2022

Huldra
> а просто enum в C++
это наследие C не выпиленное для совместимости.

#48
12:25, 7 мая 2022
enum{
  DELETE_WORLD,
  CREATE_WORLD
};
enum{
  CREATE,
  DELETE
};

int do_operation=CREATE;
if(do_operation==DELETE_WORLD){
  //...
}

Но ты этого видимо не понимаешь.

#49
12:40, 7 мая 2022

samrrr
Ну да, с точки зрения API это ужасно, соглашусь

#50
13:59, 7 мая 2022

Huldra
> ну да
Тут я бы сказал помощь даже вредна.
Во-первых, аппаратные спрайты - для человека знающего GAPI - это дел на 1 вечер (с генерацией атласов на лету - на 2 вечера)
Во-вторых, движок то твой. Ты хочешь его как-то "по своему" писать. Поэтому 1 вечер рискует превратиться в неделю, чтобы тебе все понравилось.
В-третьих, тебе стоит самой научиться в графические апи. Это даст тебе понимание того, почему никто не протягивает в движки функционал "поменять пиксель по координатам XY". И почему другие движки такие, какие есть, а не такие, как хочется тебе. И лучший способ этому научиться - набить собственные шишки (особенно с учетом твоего характера).

#51
(Правка: 15:12) 15:08, 7 мая 2022

samrrr
> Он же просто делает static_cast в енам не проверив его значение
Я просто подумал, они полагают, что static_cast это сделает за них. :D
Кстати, не уверен насчет dynamic_cast , вроде это как раз runtime-проверка, и в теории может работать.

#52
15:45, 7 мая 2022

modmaker1
> Кстати, не уверен насчет dynamic_cast , вроде это как раз runtime-проверка, и в
> теории может работать.
dynamic_cast только с указателями работает. В C++ нет рефлексии а значит проверки на принадлежность числа к енаму нет и быть не может.

Такчто остаётся использовать протобаф и нагенеренную им рефлексию.

#53
16:35, 7 мая 2022

samrrr
> В C++ нет рефлексии а значит проверки на принадлежность числа к енаму нет и
> быть не может
Честно ни разу не пробовал (поскольку предпочитаю все делать ручками), но в теории, для такой проверки не нужно знать тип, код для проверки принадлежности числа к заданному диапазону может быть добавлен на этапе компиляции.

#54
18:07, 7 мая 2022

modmaker1
> Честно ни разу не пробовал (поскольку предпочитаю все делать ручками), но в
> теории, для такой проверки не нужно знать тип, код для проверки принадлежности
> числа к заданному диапазону может быть добавлен на этапе компиляции.
Как будет рефлексия....

#55
19:09, 7 мая 2022

samrrr
> Как будет рефлексия....
Ну, я так понимаю, информация о типах, доступная приложению в runtime. По кр. мере гугл говорит за это. Если это вопрос, конечно. :)

Суть того что я написал в том, что dynamic_cast мог бы быть раскрыт в код проверки диапазона допустимых значений in-place:
a = dynamic_cast<MyEnum>(b);
в:
if ( b < MyEnum.min || b >= MyEnum.max )
Error
Чисто в теории, поскольку я написал, что не знаю.
MyEnum min и max эвальюируются на этапе компиляции, поэтому информация о типах (в runtime) не нужна.

#56
19:11, 7 мая 2022

modmaker1
> MyEnum min и max эвальюируются на этапе компиляции, поэтому информация о типах (в runtime) не нужна.
Ммм а что по енаму со значениями -20, 0, 10000?

#57
19:19, 7 мая 2022

samrrr
> а что по енаму со значениями -20, 0, 10000?
Компилятору ничто не мешает генерировать код отвечающий структуре enum-а. Мин и макс это чисто для примера.

#58
19:36, 7 мая 2022

modmaker1
> Компилятору ничто не мешает генерировать код отвечающий структуре enum-а. Мин и
> макс это чисто для примера.
Компилятору ничего не мешает поддержать рефлексию. Всеголишь надо имена полей, функций, и енамов отдать программе. Только вот этого досихпор так и не произошло. Зато в бууст завезли describe.

#59
19:46, 7 мая 2022

samrrr
Может вы и правы.. Хотя мне лично до сих пор этого не было нужно.

Страницы: 13 4 5 69 Следующая »
Arctic EngineФорум