Я хочу использовать Boost.Units для представления количества, выраженного в граммах на миллилитр. Я пытаюсь определить единицу измерения «миллилитр». Если я напишу
typedef boost::units::make_scaled_unit<
boost::units::si::volume,
boost::units::scale<10, boost::units::static_rational<-3> >
>::type liter;
typedef boost::units::make_scaled_unit<
liter,
boost::units::scale<10, boost::units::static_rational<-3> >
>::type milliliter;
код компилируется нормально, но если я заменю свой собственный liter
с boost::units::metric::liter_base_unit
тогда тогда определение milliliter
не в состоянии скомпилировать с ошибкой «нет типа с именем ‘type’ в struct boost :: units :: make_scaled_unit».
Не могли бы вы объяснить мне, почему? Может ли блок в make_scaled_unit
быть базовой единицей или мне нужно сделать производную единицу из boost::units::metric::liter_base_unit
?
Я нашел решение. Проблема, как я и предполагал, состоит в том, что make_scaled_unit
должен быть типом устройства, а не базовым. Заменяя boost::units::metric::liter_base_unit
с boost::units::metric::liter_base_unit::unit_type
, оно работает.
Код становится:
typedef boost::units::make_scaled_unit<
boost::units::metric::liter_base_unit::unit_type,
boost::units::scale<10, boost::units::static_rational<-3> >
>::type milliliter;
Других решений пока нет …