Здравствуйте, CreatorCray, Вы писали:
CC>Тем не менее, уже давно можно типобезопасно писать print ("...", a, b, c) вместо страхолюдного format ("...") % a % b % c;
так напиши обертку, и будет тебе 'format("...", a, b, c)', думаю, строк в двадцать уложишься.
или твой вариант, в компайл-тайме парсит форматную строку и проверяет соответствие типов?
CC>Причём сохраняя printf-совместимый синтаксис, чтоб не надо было править сотни строк в готовом коде при портировании.
boost.format отлично поддерживает printf-синтаксис. тыц.
CC>Как ты думаешь, что будет если буст внезапно резко поменяет интерфейс в этой библиотеке? CC>Что им скажут все те, кому понадобится переписывать все свои вызовы?
я думаю, что им не нужно избавляться от текущего boost.format, а поступить так, как поступили с сигналами. (boost.signals2)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, breee breee, Вы писали:
BB>А как же boost::filesystem::ofstream file(file_name)?
думаю, Vain имел в виду что-то типа функции 'boost::filesystem::create_file(...)', ведь есть же функция создания директории.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
CC>>Тем не менее, уже давно можно типобезопасно писать print ("...", a, b, c) вместо страхолюдного format ("...") % a % b % c; X>так напиши обертку, и будет тебе 'format("...", a, b, c)', думаю, строк в двадцать уложишься.
но в этом случае, не представляю, как ты будешь кешировать форматировщик...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, FrozenHeart, Вы писали:
К>> А что делать? Выводить там "121077±0.5" или "121076.(9)" ?
FH>Почему бы не выводить реальное значение, которым оперирует приложение? Т.е. то же самое, что выведется в случае std::fixed и std::setprecision.
Реальное значение там — все единички в двоичной мантиссе (за последний разряд не уверен, может быть и 0).
И что с этим добром делать?
А setprecision тебе просто так не поможет, там в 11-м десятичном знаке ошибка появляется. http://ideone.com/byZKxy
Здравствуйте, FrozenHeart, Вы писали:
ХГД>> А что не так? Точку не вывело?
FH>То, что на самом деле value * std::pow(10.0, 5) дало в итоге вовсе не 121077, а стрим при этом вывел именно это значение.
Первое — вывод с округлением
Второе — вывод с отсечением дробной части
Немного псевдокода с псевдоконстантами:
a = 121076.9999999999999
printf(round(a)); // 121076
printf(floor(a)); // 121077
a = 121077.1111111111111
printf(round(a)); // 121077
printf(floor(a)); // 121077
Здравствуйте, Vain, Вы писали:
V>Здравствуйте, FrozenHeart, Вы писали:
FH>>Да, все наслышаны об операциях над числами с плавающей точкой, но каждый раз поражаюсь, как сразу несколько особенностей могут "выстрелить" одновременно. V>Я вот недавно взял буст filesystem и не смог найти элементарную операцию создания файла. Ненавижу стримы.
Может, это потому, что уже есть функции типа fopen, и незачем зря их дублировать?
Здравствуйте, antonio_banderas, Вы писали:
FH>>>Да, все наслышаны об операциях над числами с плавающей точкой, но каждый раз поражаюсь, как сразу несколько особенностей могут "выстрелить" одновременно. V>>Я вот недавно взял буст filesystem и не смог найти элементарную операцию создания файла. Ненавижу стримы. _>Может, это потому, что уже есть функции типа fopen, и незачем зря их дублировать?
fopen это с, буст — с++. буст приспособлен работать с потоками. Придётся тебе так и так всё конвертировать в потоки.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]