値をある単位から別の単位に変換したいだけの場合、これを行う最も簡単な (理想的には 1 行の) 方法は何ですか?
たとえば、値をメートル単位で保存したいのですが、マイル単位で指定します。
これを行うためのほとんどの例は、多くの行が長く、typedef とユニット定義を含み、単純なユニットのない出力を提供していないようです。
値をある単位から別の単位に変換したいだけの場合、これを行う最も簡単な (理想的には 1 行の) 方法は何ですか?
たとえば、値をメートル単位で保存したいのですが、マイル単位で指定します。
これを行うためのほとんどの例は、多くの行が長く、typedef とユニット定義を含み、単純なユニットのない出力を提供していないようです。
うーん - 私は以下を使用します。
#include <boost/units/quantity.hpp>
#include <boost/units/systems/si/length.hpp>
#include <boost/units/base_units/imperial/mile.hpp>
using namespace boost::units;
quantity<si::length> distance_in_metres = static_cast<quantity<si::length> >(
100.0 * boost::units::imperial::mile_base_unit::unit_type()
);
参考までに - CPPcon 2015 でブースト ユニットに関するチュートリアル プレゼンテーションを行いました - https://www.youtube.com/watch?v=qphj8ZuZlPAでご覧いただけます
これをすばやく簡単に行うには、2 つの方法があります。
100 マイルをメートルに変換したいとします...
最初のものは量を明示的に構築します:
#include <boost/units/quantity.hpp>
#include <boost/units/systems/si/length.hpp>
#include <boost/units/base_units/imperial/mile.hpp>
double distance_in_metres = boost::units::quantity<boost::units::si::length>(
100.0 * boost::units::imperial::mile_base_unit::unit_type()
) / boost::units::si::meter;
2 番目は変換係数を作成し、それを乗算します。
#include <boost/units/systems/si/length.hpp>
#include <boost/units/base_units/imperial/mile.hpp>
double distance_in_metres = 100.0 *
boost::units::conversion_factor(
boost::units::imperial::mile_base_unit::unit_type(),
boost::units::si::meter
);