std::stoul и прочие конвертеры строка -> число должны быть constexpr и должны принимать string_view

JordanRudess
JordanRudess

Сабж

6
рейтинг
7 комментариев
yndx-antoshkka
constexpr они в ближайшем будущем не станут, так как используют локали.
Принимать string_view - это хорошая идея, но нужен протитип
yndx-antoshkka
ru.night.beast
yndx-antoshkka, а нужны ли локали для преобразования строки в число? может есть смысл в дополнительных функциях нормализации строки, а конвертеры пусть работают уже с нормализованной.
ru.night.beast
yndx-antoshkka
Вы предлагаете std::to_chars/std::from_chars :)

Я перепроверил, ваше предложение на использование string_view уже рассматривается вот тут http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0506r2.pdf и скорее всего попадёт в C++20

А вот сделать std::to_chars/std::from_chars constexpr - очень хорошая задача!
yndx-antoshkka
ru.night.beast
yndx-antoshkka, ну, предложение не мое :) просто пять копеек добавил...
ru.night.beast
Antervis
yndx-antoshkka, а string_view версия не будет медленнее const char * аналога?
Antervis
yndx-antoshkka
Перегрузка с const char* остаётся, при передаче char* и const char*, выбирается именно она, так что медленнее не будет.
yndx-antoshkka
neondev9

Двумя руками за, ибо пришлось писать самому constexpr-конвертер вида:

template<typename T>

std::optional<T> FromString(std::string_view str);

template<typename T>

std::optional<T> FromString(std::wstring_view str);

 

Классно работает с std::optional, ибо если возвращать std::nullopt, то с вызывающей стороны intellisence подсвечивает ошибку при неудачной constexpr конвертации.

 

Для int-ов и bool реализовал constexpr из char, wchar_t (char16_t, char32_t не делал). 

Для float, временно, подцепил не constexpr функции из std(strtof/wcstof, strtod/wcstod, strtold/wcstold), поэтому сама функция FromString пока не constexpr, в отличии от конвертеров int-ов и bool.

neondev9
Обновлено 
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения