将printf与boost::units::quantity值一起使用

Using printf with boost::units::quantity values

本文关键字:一起 quantity units printf boost      更新时间:2023-10-16

boost::units库提供了一种将数量值写入流的好方法,例如请参阅。

我可以将printf与数量值一起使用而不是使用输出流吗?我有相当多的代码使用printf很好地格式化了输出,我希望保留格式。将数量传递到

quantity<mass_density> rho = 1.0 * mass_density;
printf("rho %6.2en", rho);

抛出警告

警告:格式"%e"需要类型为"double"的参数,但需要参数2具有类型'增压::单位::数量<升压::单位::单位<提升::单位::列表<boost::单位::dim<提升::单位::length_base_dimension,boost::单位::static_limic&lt-0x00000000000000003l&gt>,提升::单位::列表<boost::单位::dim<提升::单位::mass_base_dimension,boost::单位::static_limic<1l>gt;,boost::units:dimensionless_type>gt;,提升::单位::均质系统<提升::单位::列表<boost::units::si::meter_base_unit,提升::单位::列表<boost::units:scaled_base_unit<boost::units:cgs:gram_base_unit,提升::单位::缩放<10l,boost::units::static_rive<3l>>gt;,提升::单位::列表<boost::units::si::second_base_unit,提升::单位::列表<升压::单位::si::ampe_base_unit,提升::单位::列表<boost::units::si::kelvin_base_unit,提升::单位::列表<boost::units::si::mole_base_unit,提升::单位::列表<boost::units::si::candela_base_unit,提升::单位::列表<提升::单位::角度::radian_base_unit,提升::单位::列表<升压::单位:角度:steradin_base_unit,boost::units:dimensionless_type>gt>gt>gt>>gt>gt>'[-Wformat]

我可以只使用rho.value(),但如果可能的话,我想输出单位(即使我更新了格式字符串)。

我想答案就在这里,http://www.boost.org/doc/libs/1_52_0/doc/html/boost_units/Reference.html#header.boost.units.io_hpp

格式说明符的列表由语言固定。"%e"输出double"%d"输出int等。没有什么可以输出quantity<mass_density>类型的对象或任何其他类类型的对象。

你可以有这个:

template <typename Unit, typename T>
string symbolic_units(const quantity<Unit, T> &)
{
return symbol_string(Unit());
}
int main()
{
quantity<mass_density> x;
x = 3.72 * kilogram_per_cubic_meter;
printf ("%g %sn", x.value(), symbolic_units(x).c_str());
}

但没有更多。当然,除非你愿意使用流。