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

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

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

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

1

Решение

хммм — я использую следующее.

#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

5

Другие решения

Есть два способа сделать это быстро и легко.

Скажем, вы хотите перевести 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
);
2

По вопросам рекламы [email protected]