为什么在将 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?
我想用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;