Сообщение Re: std::to_string от 17.05.2025 9:35
Изменено 17.05.2025 9:47 rg45
Re: std::to_string
Здравствуйте, Marty, Вы писали:
M>Насколько легально перегружать to_string из NS std для своих типов?
Ну, to_string и раньше не была обозначена как "customization point". А в последних версиях я и вовсе не нахожу этого пункта. Выходит, нельзя. Подробнее можно почитать по ссылкам:
https://en.cppreference.com/w/cpp/language/extending_std
https://timsong-cpp.github.io/cppwp/constraints
M>ADL — не работает. Вернее, конечно же работает для моих типов, когда я пишу to_string(myTypeVal), но это вполне ожидаемо не работает для встроенных типов. Как быть?
Я бы сразу затачивал собственную программу на использование собственной версии ToString, через которую будут доступны все версии std::to_string и которую можно будет расширять, как дуще будет угодно.
M>Насколько легально перегружать to_string из NS std для своих типов?
Ну, to_string и раньше не была обозначена как "customization point". А в последних версиях я и вовсе не нахожу этого пункта. Выходит, нельзя. Подробнее можно почитать по ссылкам:
https://en.cppreference.com/w/cpp/language/extending_std
https://timsong-cpp.github.io/cppwp/constraints
M>ADL — не работает. Вернее, конечно же работает для моих типов, когда я пишу to_string(myTypeVal), но это вполне ожидаемо не работает для встроенных типов. Как быть?
Я бы сразу затачивал собственную программу на использование собственной версии ToString, через которую будут доступны все версии std::to_string и которую можно будет расширять, как дуще будет угодно.
Re: std::to_string
Здравствуйте, Marty, Вы писали:
M>Насколько легально перегружать to_string из NS std для своих типов?
Ну, to_string и раньше не была обозначена как "customization point". А в последних версиях я и вовсе не нахожу этого пункта. Выходит, нельзя. Подробнее можно почитать по ссылкам:
https://en.cppreference.com/w/cpp/language/extending_std
https://timsong-cpp.github.io/cppwp/constraints
M>ADL — не работает. Вернее, конечно же работает для моих типов, когда я пишу to_string(myTypeVal), но это вполне ожидаемо не работает для встроенных типов. Как быть?
Я бы сразу затачивал собственную программу на использование собственной версии ToString, через которую будут доступны все версии std::to_string и которую можно будет расширять, как дуще будет угодно.
Эскизно (с концептами) так:
Того же эффекта можно добиться и на SFINAE, просто вместо концептов будут классы метафункций.
M>Насколько легально перегружать to_string из NS std для своих типов?
Ну, to_string и раньше не была обозначена как "customization point". А в последних версиях я и вовсе не нахожу этого пункта. Выходит, нельзя. Подробнее можно почитать по ссылкам:
https://en.cppreference.com/w/cpp/language/extending_std
https://timsong-cpp.github.io/cppwp/constraints
M>ADL — не работает. Вернее, конечно же работает для моих типов, когда я пишу to_string(myTypeVal), но это вполне ожидаемо не работает для встроенных типов. Как быть?
Я бы сразу затачивал собственную программу на использование собственной версии ToString, через которую будут доступны все версии std::to_string и которую можно будет расширять, как дуще будет угодно.
Эскизно (с концептами) так:
template <template T>
concept StdToStringCompatible = requires(T t) {{std::to_string(t)} -> std::convertible_to<std::string>;};
std::string ToString(StdToStringCompatible auto&& t) {return std::to_string(t);}
std::string ToString(const MyTypeVal& t) { return /* . . . */; }
Того же эффекта можно добиться и на SFINAE, просто вместо концептов будут классы метафункций.