Если я просто хочу преобразовать значение из одной единицы в другую, каков самый простой (в идеале однострочный) способ сделать это?
Например, я хочу сохранить значение в метрах, но указать его в милях.
Большинство примеров для этого, кажется, состоят из нескольких строк, содержат определения типов и определения единиц измерения, и не дают простого вывода без единиц измерения.
хммм — я использую следующее.
#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
Есть два способа сделать это быстро и легко.
Скажем, вы хотите перевести 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
);