Информация об изменениях

Сообщение Re[5]: operator* для enum class от 23.09.2021 14:24

Изменено 23.09.2021 15:13 B0FEE664

Re[5]: operator* для enum class
Здравствуйте, ·, Вы писали:

BFE>> Явное имя, в котором указан тип, подразумевает, что существуют какие-то ещё функции, типа toUInt32, toUShort....

·>ок, пусть toUInt() или вообще asOrdinal() или asNumber().
·>Но всё равно сово-глобусный аргумент.
Вот и получается, что для каждого enum какая-то своя функция, не такая, ку у другого enum, а хочется унификации.

·>Ведь наличие operator+ явно подразумевает наличие и -*/^ и т.п.

Это да. Мне ближе в этом плане operator*, как у смарт указателей, но... смотри ответ watchmaker.

BFE>> Для меня toInt(..) означает, что у вас в enum'е лежат отрицательные значения.

·>Ну в коде был int я так и написал. Какой тип использовать — это другой вопрос. Я пытаюсь понять мотивацию выбора неявного значка вместо явного слова.
Синтаксический сахар. Это как с лямбдами — и до них можно было всё тоже самое, но введение нового синтаксиса сильно упростило применение функций из <algorithm>.

BFE>> Это уже подозрительно. Такой код означает, что надо проверять, что там fn(..) делает и какие значения у enum.

·>operator+ чем поможет?
А он не указывает тип возвращаемого значения.

·>Суть в том, что видя первый раз в жизни +Foo я не понимаю что тут хотят сказать и даже неясно как догадаться — надо лезть в доку. asOrdinal(Foo) — сразу ясно — взять порядковое значение енума.

И не факт, что чтение доки поможет. Мне, например, не помогло.

BFE>> А ещё такая функция говорит, что вероятно где-то есть toEnumXXX(int) в которой, вероятно, есть UB (хотя это зависит от версии используемого стандарта).

·>Да, действительно. Захочется превратить int обратно в enum и непонятно какой оператор и куда влепить.
С названием функции та же ситуация.
Re[5]: operator* для enum class
Здравствуйте, ·, Вы писали:

BFE>> Явное имя, в котором указан тип, подразумевает, что существуют какие-то ещё функции, типа toUInt32, toUShort....

·>ок, пусть toUInt() или вообще asOrdinal() или asNumber().
·>Но всё равно сово-глобусный аргумент.
Вот и получается, что для каждого enum какая-то своя функция, не такая, как у другого enum, а хочется унификации.

·>Ведь наличие operator+ явно подразумевает наличие и -*/^ и т.п.

Это да. Мне ближе в этом плане operator*, как у смарт указателей, но... смотри ответ watchmaker.

BFE>> Для меня toInt(..) означает, что у вас в enum'е лежат отрицательные значения.

·>Ну в коде был int я так и написал. Какой тип использовать — это другой вопрос. Я пытаюсь понять мотивацию выбора неявного значка вместо явного слова.
Синтаксический сахар. Это как с лямбдами — и до них можно было всё тоже самое, но введение нового синтаксиса сильно упростило применение функций из <algorithm>.

BFE>> Это уже подозрительно. Такой код означает, что надо проверять, что там fn(..) делает и какие значения у enum.

·>operator+ чем поможет?
А он не указывает тип возвращаемого значения.

·>Суть в том, что видя первый раз в жизни +Foo я не понимаю что тут хотят сказать и даже неясно как догадаться — надо лезть в доку. asOrdinal(Foo) — сразу ясно — взять порядковое значение енума.

И не факт, что чтение доки поможет. Мне, например, не помогло.

BFE>> А ещё такая функция говорит, что вероятно где-то есть toEnumXXX(int) в которой, вероятно, есть UB (хотя это зависит от версии используемого стандарта).

·>Да, действительно. Захочется превратить int обратно в enum и непонятно какой оператор и куда влепить.
С названием функции та же ситуация.