【问题标题】:Can I use Boost's format library to replace iostream?可以用 Boost 的格式库代替 iostream 吗?
【发布时间】:2011-02-14 13:28:27
【问题描述】:

我不喜欢在 C++ 库中使用 <iostream>。我更喜欢在<stdio.h> 中使用类似于“printf”和“scanf”的东西。

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

【问题讨论】:

标签: c++ boost iostream stdio


【解决方案1】:

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

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

【讨论】:

  • 很抱歉,我不知道这件事。我可以说如果我使用 + Boost 格式库,那么我可以获得我想要的功能(类似于 但类型安全)?谢谢。
  • @CMW 是的,这正是 Boost.Format 的目标。
  • @Vicente:谢谢。但不幸的是,Boost.Format 不适用于 istream。
【解决方案2】:

Boost.Format 适用于 ostream。你按如下方式使用它

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

或喜欢

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

并根据需要打印字符串。

Boost.Format 不适用于 istream。

【讨论】:

    【解决方案3】:

    你可以继续在 C++ 中使用printf,这没有错。只需#include &lt;cstdio&gt; 就可以了。当然,iostream 有几个好处(类型安全是最重要的) - 所以我仍然建议切换。

    【讨论】:

    • 据我所知, 相同,它不是类型安全的。我想要与 一样好的东西,它是类型安全的,但提供类似于“printf”和“scanf”的东西。谢谢。
    • nothing wrong with that: printf 缺乏类型安全是不是有问题? :P
    • 我认为类型安全在这里并不重要。只要printf 的第一个参数是文字,大多数编译器都会警告潜在的类型违规。
    • @Marcelo:谢谢。我可以说我可以在我的所有 C++ 程序中继续使用 / 没有任何问题吗?
    • @Marcelo Cantos:除非你使用sync_with_stdio
    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-24
        • 2019-02-21
        • 2018-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-27
        • 1970-01-01
        相关资源
        最近更新 更多