【发布时间】:2012-12-19 18:46:02
【问题描述】:
boost::units library 提供了一种将数量值写入流see for example 的好方法。
我可以将 printf 与数量值一起使用,而不是使用输出流吗?我有相当多的代码使用 printf 很好地格式化了输出,我想保留格式。将数量传递给say
quantity<mass_density> rho = 1.0 * mass_density;
printf("rho %6.2e\n", rho);
抛出警告
警告:格式“%e”需要“double”类型的参数,但参数 2 有类型 'boost::units::quantity<:units::unit boost::units::static_rational>>, boost::units::list<:units::dim boost::units::static_rational>>, boost::units::dimensionless_type>>, boost::units::homogeneous_system<:units::list boost::units::list boost::units::scale boost::units::static_rational> >>, boost::units::list<:units::si::second_base_unit boost::units::list boost::units::dimensionless_type> > > > > > > > > > >' [-Wformat]
我可以只使用 rho.value() 代替,但如果可能的话,我想输出单位(即使我已经更新了格式字符串)。
我想答案就在这里,http://www.boost.org/doc/libs/1_52_0/doc/html/boost_units/Reference.html#header.boost.units.io_hpp
【问题讨论】:
-
如果你打算使用一些 C++ 特性,比如 Boost 单元,你可能想要使用其他特性,比如流。大多数 Boost 类都有流操作符 IIRC 的重载。如果您需要 printf 语法,Boost 提供了一个基于流的库,它采用格式字符串。
-
@peachykeen 是说我应该使用流以与 boost 保持一致吗?
-
我建议使用流或 Boost 的 C++ printf 库,是的。尽管它不是一个全局解决方案(可变参数在 C++ 样式的打印中更困难),但它更符合习惯并能帮助您避免这样的头痛。
-
@peachykeen 不幸的是,这就是我想要保留的,一个带有可变参数的自定义 printf。我可以失去它,但不是世界末日
标签: c++ boost formatting boost-units