boost::units ライブラリは、数量値をストリームに書き込む優れた方法を提供します。例を参照してください。
出力ストリームを使用する代わりに、数量値で printf を使用できますか? printf を使用して出力を適切にフォーマットしたかなりの量のコードがあり、フォーマットを維持したいと考えています。数量を say に渡す
quantity<mass_density> rho = 1.0 * mass_density;
printf("rho %6.2e\n", rho);
警告をスローします
警告: フォーマット '%e' はタイプ 'double' の引数を想定していますが、引数 2 のタイプは 'boost::units::quantity<boost::units::unit<boost::units::list<boost::units: :dim<boost::units::length_base_dimension, boost::units::static_rational<-0x00000000000000003l> >, boost::units::list<boost::units::dim<boost::units::mass_base_dimension, boost: :units::static_rational<1l> >, boost::units::dimensionless_type> >, boost::units::homogeneous_system<boost::units::list<boost::units::si::meter_base_unit, boost:: units::list<boost::units::scaled_base_unit<boost::units::cgs::gram_base_unit, boost::units::scale<10l, boost::units::static_rational<3l> > >, boost:: units::list<boost::units::si::second_base_unit, boost::units::list<boost::units::si::ampere_base_unit, boost::units::list<boost::units::si::kelvin_base_unit, boost::units::list<boost::units::si::mole_base_unit, boost::units::list<boost::units::si::candela_base_unit , boost::units::list<boost::units::angle::radian_base_unit, boost::units::list<boost::units::angle::steradian_base_unit, 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