我想使用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/

10-11 00:23