我想使用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
的定义将无法编译,并且在结构boost::units::make_scaled_unit中出现“没有类型为'type'的类型”错误。您能解释一下为什么吗?
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;
关于c++ - 为什么在使用boost::units::make_scaled_unit with liter_base_unit?时出现编译错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19138982/