Почему я получаю ошибку компиляции при использовании boost :: units :: make_scaled_unit с liter_base_unit?

Я хочу использовать 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?

1

Решение

Я нашел решение. Проблема, как я и предполагал, состоит в том, что 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;
2

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

Других решений пока нет …

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