python format for C++20
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.03.19 16:36
Оценка:
привет!

почитал это(https://habr.com/ru/company/yandex/blog/438864/), и обратил внимание на это(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r5.html).

сабжевую реализацию я как-то пытался использовать, но не срослось...
две причины:
первый пункт пока зачеркну, похоже что-то изменилось в лучшую сторону.
1. результат в виде строки.
т.е. нет возможности выводить в какой-нить iostream по мере форматирования.
пример:
std::cout << std::format("{}-{}", 1, 2);

тут результат сначала будет выведен в строку, потом вся строка в std::cout.
а представте, что плейсхолдеров у вас десяток. или, заменители размером в сотни байт.


2. не учитывает установленные флаги iostream.
т.е. этот же пример выведет не то, что вы ожидаете.
std::cout.precision(4);
std::cout.flags(std::ios_base::fixed|std::ios_base::showpoint);
std::cout << std::format("{}-{}", 1.3, 2.7);


радует, конечно, что оно появилось, но расстраивает, конечно, что появилось в таком виде.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 07.03.2019 17:00 niXman . Предыдущая версия . Еще …
Отредактировано 07.03.2019 16:59 niXman . Предыдущая версия .
Отредактировано 07.03.2019 16:54 niXman . Предыдущая версия .
Re: python format for C++20
От: rg45 СССР  
Дата: 07.03.19 16:59
Оценка:
Здравствуйте, niXman, Вы писали:

X>сабжевую реализацию я как-то пытался использовать, но не срослось...

X>две причины:
X>1. результат в виде строки.
X>т.е. нет возможности выводить в какой-нить iostream по мере форматирования.

X>2. не учитывает установленные флаги iostream.

X>т.е. этот же пример выведет не то, что вы ожидаете.

Имхо, ты пытаешься смешать две отдельные задачи. Основой "target scenario" этой фичи — как раз тот случай, когда никакого ostream нету, а нужно просто получить строку. Раньше для решения этой задачи приходилось использовать то boost::format, то boost::lexical_cast, или по-быстрячку колбасить локальные "to_string", которые нужны были временно, как правило. Иногда они удалялись, а иногда забывались, засирая код.
--
Не можешь достичь желаемого — пожелай достигнутого.
Re: python format for C++20
От: watchmaker  
Дата: 07.03.19 17:00
Оценка: +1
Здравствуйте, niXman, Вы писали:

X>1. результат в виде строки.

X>т.е. нет возможности выводить в какой-нить iostream по мере форматирования.
Есть же!

X>2. не учитывает установленные флаги iostream.

X>т.е. этот же пример выведет не то, что вы ожидаете.
Выводит что ожидаю
Отредактировано 07.03.2019 17:29 watchmaker . Предыдущая версия .
Re[2]: python format for C++20
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.03.19 17:03
Оценка:
Здравствуйте, rg45, Вы писали:

R>Имхо, ты пытаешься смешать две отдельные задачи. Основой "target scenario" этой фичи — как раз тот случай, когда никакого ostream нету, а нужно просто получить строку.

во-первых — ostream есть, и, судя по всему, никуда уже не денется. с ним считаться нужно.
во-вторых — если бы был возможен вывод в ostream — очень просто сделать его выводом в строку. а вот наоборот — сложнее.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: python format for C++20
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.03.19 17:04
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>Выводит, что ожидаю.

значит таки пофикиси...

удалите тему, кто имеет возможность
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: python format for C++20
От: Pzz Россия https://github.com/alexpevzner
Дата: 12.03.19 10:14
Оценка: +2
Здравствуйте, niXman, Вы писали:

X>радует, конечно, что оно появилось, но расстраивает, конечно, что появилось в таком виде.


printf("%*s", 10, "foo");
format("{:{}}", "foo", 10);


Хм. И они хотят сказать, что второй вариант чем-то лучше первого?

Кажется, это место разрабатывали тайные приверженцы Brainfuck...
Re[2]: python format for C++20
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 13.03.19 00:22
Оценка:
Здравствуйте, rg45, Вы писали:


R>Имхо, ты пытаешься смешать две отдельные задачи. Основой "target scenario" этой фичи — как раз тот случай, когда никакого ostream нету, а нужно просто получить строку. Раньше для решения этой задачи приходилось использовать то boost::format, то boost::lexical_cast, или по-быстрячку колбасить локальные "to_string", которые нужны были временно, как правило. Иногда они удалялись, а иногда забывались, засирая код.


Всегда были ostringstream/istringstream
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.