为什么在将 boost::units::make_scaled_unit 与 liter_base_unit 一起使用时

Why do I get a compilation error when using boost::units::make_scaled_unit with liter_base_unit?

本文关键字:unit liter base 一起 scaled boost units make 为什么      更新时间:2023-10-16

我想用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;

代码编译良好,但是如果我用boost::units::metric::liter_base_unit替换我自己的liter,那么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;