我不喜欢<iostream>
在 C++ 库中使用。我更喜欢在<stdio.h>
.
我可以使用 Boost 的格式库来替换<iostream>
我所有的 C++ 程序吗?
Boost Format 只做格式化位。您仍然需要 iostream 才能真正使某些内容出现在屏幕上。
当然,将它们一起使用将达到与printf
您正在寻找的同等水平。并且它在不牺牲类型安全的情况下这样做(尽管这在当今不是一个大问题,因为编译器通常会警告错误的 printf 参数)。
Boost.Format 适用于 ostreams。你使用它如下
cout << boost::format("%2% %1%") % 36 % 77;
或喜欢
string s2 = str( format("%2% %1%") % 36 % 77 );
并根据需要打印字符串。
Boost.Format 不适用于 istream。
您可以继续printf
在 C++ 中使用,这没有错。只是#include <cstdio>
,你很高兴去。当然,iostream
有几个好处(类型安全是最重要的) - 所以我仍然建议切换。
scanf
正如其他人给出的那样,简短的回答是肯定的,但是在 Boost 格式中没有等效的。但是,另一种方法是使用Boost 的 Spirit库,该库分别通过 Karma 和 Qi 组件具有输入和输出功能。不过,这对于您正在做的事情来说可能有点过头了,因为它是一个完整的解析器/生成器实现。
printf 和 scanf 受到限制,您不能将自己的对象与它们一起使用。
如果您使用 C++,则需要对流有所了解,因为这是该语言的标准。在 C++ 中,您可以为自己的对象创建流运算符并让它们与流完美配合。
当然,您可以使用 boost::format,但它只用于格式化输出。我喜欢 boost::format,它非常有用,例如,当您使用本地化(可翻译字符串)时。