1

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

代码编译得很好,但是如果我用 替换自己的代码literboost::units::metric::liter_base_unit那么定义将milliliter无法编译,并出现“在 struct boost::units::make_scaled_unit 中没有名为 'type' 的类型”错误。你能解释一下为什么吗?中的单位make_scaled_unit可以是基本单位还是我需要从中制作派生单位boost::units::metric::liter_base_unit

4

1 回答 1

2

我找到了解决方案。正如我所建议的,问题在于,其中的单位make_scaled_unit必须是单位类型,而不是基本单位。通过替换boost::units::metric::liter_base_unitboost::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;
于 2013-10-02T15:49:48.467 回答