3

我不喜欢<iostream>在 C++ 库中使用。我更喜欢在<stdio.h>.

我可以使用 Boost 的格式库来替换<iostream>我所有的 C++ 程序吗?

4

5 回答 5

5

Boost Format 只做格式化位。您仍然需要 iostream 才能真正使某些内容出现在屏幕上。

当然,将它们一起使用将达到与printf您正在寻找的同等水平。并且它在不牺牲类型安全的情况下这样做(尽管这在当今不是一个大问题,因为编译器通常会警告错误的 printf 参数)。

于 2010-05-01T13:44:28.230 回答
5

Boost.Format 适用于 ostreams。你使用它如下

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

或喜欢

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

并根据需要打印字符串。

Boost.Format 不适用于 istream。

于 2010-05-01T13:48:26.550 回答
2

您可以继续printf在 C++ 中使用,这没有错。只是#include <cstdio>,你很高兴去。当然,iostream有几个好处(类型安全是最重要的) - 所以我仍然建议切换。

于 2010-05-01T13:43:56.090 回答
0

scanf正如其他人给出的那样,简短的回答是肯定的,但是在 Boost 格式中没有等效的。但是,另一种方法是使用Boost 的 Spirit库,该库分别通过 Karma 和 Qi 组件具有输入和输出功能。不过,这对于您正在做的事情来说可能有点过头了,因为它是一个完整的解析器/生成器实现。

于 2010-05-03T19:28:35.640 回答
0

printf 和 scanf 受到限制,您不能将自己的对象与它们一起使用。

如果您使用 C++,则需要对流有所了解,因为这是该语言的标准。在 C++ 中,您可以为自己的对象创建流运算符并让它们与流完美配合。

当然,您可以使用 boost::format,但它只用于格式化输出。我喜欢 boost::format,它非常有用,例如,当您使用本地化(可翻译字符串)时。

于 2010-05-01T13:49:18.067 回答