boost::units library提供了一种将数量值写入流see for example的好方法。
我可以将printf与数量值一起使用而不是使用输出流吗?我有相当数量的代码,使用printf很好地格式化输出,我想保持格式。将数量传递给说
quantity<mass_density> rho = 1.0 * mass_density;
printf("rho %6.2e\n", rho);
抛出警告
警告:格式'%e'需要类型为'double'的参数,但参数为2 有类型 “增强::单元::量&LT;升压::单元::单元&LT;升压::单元::列表&LT;升压::单元::暗淡&LT;升压::单元:: length_base_dimension, 升压::单元:: static_rational&LT; -0x00000000000000003l&GT; &gt;中 升压::单元::列表&LT;升压::单元::暗淡&LT;升压::单元:: mass_base_dimension, 升压::单元:: static_rational&LT;1升&GT; &gt;中 升压::单元:: dimensionless_type&GT; &gt;中 升压::单元:: homogeneous_system&LT;升压::单元::列表&LT;升压::单元:: SI :: meter_base_unit, 升压::单元::列表&LT;升压::单元:: scaled_base_unit&LT;升压::单元:: CGS :: gram_base_unit, boost :: units :: scale&lt; 10l,boost :: units :: static_rational&lt; 3l&gt; &GT; &gt;,boost :: units :: list&lt; boost :: units :: si :: second_base_unit, 提高::单位::列表&LT;提高::单位:: SI :: ampere_base_unit, 提高::单位::列表&LT;提高::单位:: SI :: kelvin_base_unit, 提高::单位::列表&LT;提高::单位:: SI :: mole_base_unit, 提高::单位::列表&LT;提高::单位:: SI :: candela_base_unit, 升压::单元::列表&LT;升压::单元::角度:: radian_base_unit, 升压::单元::列表&LT;升压::单元::角度:: steradian_base_unit, 升压::单元:: dimensionless_type&GT; &GT; &GT; &GT; &GT; &GT; &GT; &GT; &GT; &GT; &GT; &gt;'[ - 格式化]
我可以使用rho.value()代替,但我想尽可能输出单位(即使我更新了格式字符串)。
我认为答案就在这里,http://www.boost.org/doc/libs/1_52_0/doc/html/boost_units/Reference.html#header.boost.units.io_hpp
答案 0 :(得分:4)
格式说明符列表由语言修复。 "%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 %s\n", x.value(), symbolic_units(x).c_str());
}
但不多。除非你愿意使用溪流。