Самый простой способ конвертировать между двумя величинами с Boost:: единиц?

Если я просто хочу преобразовать значение из одной единицы в другую, каков самый простой (в идеале однострочный) способ сделать это?

Например, я хочу сохранить значение в метрах, но указать его в милях.

Большинство примеров для этого, кажется, состоят из нескольких строк, содержат определения типов и определения модулей, и не дают простого вывода без единиц измерения.

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;

Вторая создает коэффициент пересчета и умножается на это:

#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
  );

Хммм - я использую следующее.

#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()
);

К вашему сведению - я сделал презентацию с учебным пособием по Boost Units на CPPcon 2015 - вы можете найти его по адресу https://www.youtube.com/watch?v=qphj8ZuZlPA

Другие вопросы по тегам