Size: a a a

2020 September 09

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
Как раз меньше всего смысла парсить строку формата в контексте конкретного типа, потому что это можно применить операцией к конкретному типу
Вопрос удобства, для чисел например куча опций формата - база, выравнивание, ширина и т.п. Или то же время, много составляющих, нереально без спецификации описать все возможные форматы операциями. Но иногда нужен custom и это удобней делать через новые типы (которые тоже могут какие то спецификации поддерживать). Я ж не могу например для size_t переопределить способы форматирования, но могу завернуть его в новый тип, format("file size: {}", fmt::bytes(size)).
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Вопрос удобства, для чисел например куча опций формата - база, выравнивание, ширина и т.п. Или то же время, много составляющих, нереально без спецификации описать все возможные форматы операциями. Но иногда нужен custom и это удобней делать через новые типы (которые тоже могут какие то спецификации поддерживать). Я ж не могу например для size_t переопределить способы форматирования, но могу завернуть его в новый тип, format("file size: {}", fmt::bytes(size)).
> Я ж не могу
это ключевая подстрока, это ситуация двойного диспетчера (формат, тип), и у тебя этот диспетчер гвоздями вбит со стороны "тип"
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
> Я ж не могу
это ключевая подстрока, это ситуация двойного диспетчера (формат, тип), и у тебя этот диспетчер гвоздями вбит со стороны "тип"
Не у меня, всё из питона растет :)
источник

CD

Constantine Drozdov in pro.cxx
> нереально без спецификации описать все возможные форматы операциями
почему нереально? d2s(1488, "%.3") уже решило этот вопрос
источник

CD

Constantine Drozdov in pro.cxx
осталось только разобраться, как это без строки записать
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
> нереально без спецификации описать все возможные форматы операциями
почему нереально? d2s(1488, "%.3") уже решило этот вопрос
А, объединить спецификацию со ссылкой на значение. Ну можно, но многословно.
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
А, объединить спецификацию со ссылкой на значение. Ну можно, но многословно.
Так ты это и делаешь
источник

CD

Constantine Drozdov in pro.cxx
>  fmt::bytes(size)
вот же она, положила
источник

CD

Constantine Drozdov in pro.cxx
надо просто перейти на следующий уровень
format("time stamp: {}", fmt::time(tp))
источник

AN

Alexander N in pro.cxx
А что мешает быть форматтеру структурой с operator (), которую вызывает сам std::format?
источник

CD

Constantine Drozdov in pro.cxx
format("integer: {}", fmt::decimal(n))
источник

AN

Alexander N in pro.cxx
Для подстановки
источник

DS

Dmitry Sokolov in pro.cxx
Alexander N
А что мешает быть форматтеру структурой с operator (), которую вызывает сам std::format?
Так он и есть такая структура.
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
надо просто перейти на следующий уровень
format("time stamp: {}", fmt::time(tp))
Ну я ж говорю, можно, но многословно. Если эти же настройки можно записать символами внутри спецификации, будет просто короче.
источник

AN

Alexander N in pro.cxx
Лишних аллокаций немного будет наверное правда тогда надо убедиться, что форматируемое значение не сгинуло никуда
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Ну я ж говорю, можно, но многословно. Если эти же настройки можно записать символами внутри спецификации, будет просто короче.
То есть хорошо писать {bytes}, но не можем, потому что fmtlib, верно?
источник

CD

Constantine Drozdov in pro.cxx
Потому что если строку формата таки разобрать, вызов будет query_back_inserter(bytes_tag, int)
источник

CD

Constantine Drozdov in pro.cxx
для format("file size: {bytes}", 1488)
источник

DS

Dmitry Sokolov in pro.cxx
Constantine Drozdov
То есть хорошо писать {bytes}, но не можем, потому что fmtlib, верно?
Да не, ничего хорошего. У чисел и так сложная спецификация, куда там вписать bytes? Если говорить о регистрации custom обработчиков... Ну дорого же, а конфликты?
источник

CD

Constantine Drozdov in pro.cxx
Dmitry Sokolov
Да не, ничего хорошего. У чисел и так сложная спецификация, куда там вписать bytes? Если говорить о регистрации custom обработчиков... Ну дорого же, а конфликты?
А нет конфликтов, ты не можешь менять спецификацию того, что описано в std::format, как и сейчас
источник