如果我只想将一个值从一个单位转换为另一个单位,那么最简单(理想情况下是单行)的方法是什么?
例如,我想以米为单位存储一个值,但以英里为单位指定它。
执行此操作的大多数示例似乎很长,涉及 typedef 和单元定义,并且没有给出简单的无单元输出。
如果我只想将一个值从一个单位转换为另一个单位,那么最简单(理想情况下是单行)的方法是什么?
例如,我想以米为单位存储一个值,但以英里为单位指定它。
执行此操作的大多数示例似乎很长,涉及 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 上做了一个关于 Boost Units 的教程演示 - 你可以在https://www.youtube.com/watch?v=qphj8ZuZlPA找到它
有两种方法可以快速轻松地做到这一点。
假设您要将 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;
第二个创建一个转换因子并乘以:
#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
);