Могу ли я использовать библиотеку форматов Boost для замены iostream? - PullRequest
3 голосов
/ 01 мая 2010

Я не люблю использовать <iostream> в C ++ Library. Я предпочитаю использовать что-то похожее на «printf» и «scanf» в <stdio.h>.

Могу ли я использовать библиотеку форматов Boost для замены <iostream> во всех моих программах на C ++?

Ответы [ 5 ]

5 голосов
/ 01 мая 2010

Boost Format только форматирует бит. Вам все еще нужен iostream, чтобы что-то появилось на экране.

Конечно, их совместное использование позволит получить паритет с printf, который вы ищете. И это происходит без ущерба для безопасности типов (хотя в наши дни это не такая уж большая проблема, поскольку компилятор обычно предупреждает о неверных аргументах printf).

5 голосов
/ 01 мая 2010

Boost. Формат работает с ostreams. Вы используете его следующим образом

cout << boost::format("%2% %1%") % 36 % 77; 

или как

string s2 = str( format("%2% %1%") % 36 % 77 );

и распечатайте строку как хотите.

Boost.Format не работает с istreams.

2 голосов
/ 01 мая 2010

Вы можете продолжать использовать printf в C ++, ничего страшного в этом нет. Просто #include <cstdio> и все готово. Конечно, у iostream есть несколько преимуществ (большая безопасность - это безопасность типов), поэтому я все равно рекомендую переключиться.

0 голосов
/ 03 мая 2010

Краткий ответ, как дали другие, - да, но нет эквивалента для scanf в Boost-формате. Однако альтернативой является использование библиотеки Boost's Spirit , которая имеет возможности ввода и вывода через компоненты Karma и Qi соответственно. Впрочем, это может быть излишним из-за того, что вы делаете, поскольку это полная реализация парсера / генератора.

0 голосов
/ 01 мая 2010

printf и scanf ограничены тем, что вы не можете использовать свои собственные объекты с ними.

Если вы используете C ++, вам нужно немного узнать о потоках, потому что это стандарт языка. В C ++ вы можете создавать потоковые операторы для ваших собственных объектов и заставить их отлично работать с потоками.

Конечно, вы можете использовать boost :: format, но это будет только для форматированного вывода. Мне нравится boost :: format, и это очень полезно, например, когда вы используете локализацию (переводимые строки).

...