提升异构单位 - 每分钟巴数

Boost heterogeneous unit - Bar per Minute

本文关键字:每分钟 单位 异构      更新时间:2023-10-16

我需要创建一个表示每次压力的单位,特别是每分钟柱。我尝试以与之前创建类似单位相同的方式创建它:

typedef boost::units::derived_dimension<boost::units::length_base_dimension, -1,
    boost::units::mass_base_dimension, 1,
    boost::units::time_base_dimension, -3>::type pressure_roc_dimension;
typedef boost::units::unit<pressure_roc_dimension, 
    boost::units::make_system<boost::units::metric::bar_base_unit, 
        boost::units::metric::minute_base_unit>::type> bar_per_minute_unit;
BOOST_UNITS_STATIC_CONSTANT(BarPerMinute, bar_per_minute_unit::unit_type);
typedef boost::units::quantity<bar_per_minute_unit, double> BarPerMinuteRoC;

然后我尝试使用它:

BarPerMinuteRoC bpm = 5.0 * BarPerMinute;

但是这一行没有编译相当长的错误轨迹,我很难完全理解。

1>c:workspaceexternalsboost_1_57_0includeboostunitsdetaillinear_algebra.hpp(197): error C2039: 'item' : is not a member of 'boost::units::dimensionless_type'
1>          c:workspaceexternalsboost_1_57_0includeboostunitsdimensionless_type.hpp(37) : see declaration of 'boost::units::dimensionless_type'
1>          c:workspaceexternalsboost_1_57_0includeboostunitsdetaillinear_algebra.hpp(259) : see reference to class template instantiation 'boost::units::detail::determine_extra_equations_skip_zeros_impl<true,false>::apply<RowsBegin,1,1,3,Result>' being compiled
1>          with
1>          [
1>              RowsBegin=boost::units::list<boost::units::list<boost::units::static_rational<0,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::detail::make_zero_vector<0>::type>>,boost::units::detail::determine_extra_equations_skip_zeros_impl<false,true>::apply<boost::units::list<boost::units::list<boost::units::static_rational<-1,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::list<boost::units::static_rational<-2,1>,boost::units::detail::expand_dimensions<0>::apply<boost::units::dimensionless_type,boost::units::dimensionless_type>::type>>>,boost::units::dimensionless_type>,1,0,3,boost::units::list<boost::units::list<boost::units::static_rational<0,1>,boost::units::list<boost::units::static_rational<0,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::detail::make_zero_vector<0>::type>>>,boost::units::list<boost::units::list<boost::units::static_rational<-1,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::list<boost::units::static_rational<-2,1>,boost::units::detail::expand_dimensions<0>::apply<boost::units::dimensionless_type,boost::units::dimensionless_type>::type>>>,boost::units::dimensionless_type>>>::next_equations>
1>  ,            Result=boost::units::list<boost::units::list<boost::units::static_rational<0,1>,boost::units::list<boost::units::static_rational<0,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::detail::make_zero_vector<0>::type>>>,boost::units::list<boost::units::list<boost::units::static_rational<-1,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::list<boost::units::static_rational<-2,1>,boost::units::detail::expand_dimensions<0>::apply<boost::units::dimensionless_type,boost::units::dimensionless_type>::type>>>,boost::units::dimensionless_type>>
1>          ]
1>          c:workspaceexternalsboost_1_57_0includeboostunitsdetaillinear_algebra.hpp(264) : see reference to class template instantiation 'boost::units::detail::determine_extra_equations<2,false>::apply<boost::units::list<boost::units::list<boost::units::static_rational<0,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::detail::make_zero_vector<0>::type>>,boost::units::detail::determine_extra_equations_skip_zeros_impl<false,true>::apply<boost::units::list<boost::units::list<boost::units::static_rational<-1,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::list<boost::units::static_rational<-2,1>,boost::units::detail::expand_dimensions<0>::apply<boost::units::dimensionless_type,boost::units::dimensionless_type>::type>>>,boost::units::dimensionless_type>,1,0,3,Result>::next_equations>,3,Result>' being compiled
1>          with
1>          [
1>              Result=boost::units::list<boost::units::list<boost::units::static_rational<0,1>,boost::units::list<boost::units::static_rational<0,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::detail::make_zero_vector<0>::type>>>,boost::units::list<boost::units::list<boost::units::static_rational<-1,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::list<boost::units::static_rational<-2,1>,boost::units::detail::expand_dimensions<0>::apply<boost::units::dimensionless_type,boost::units::dimensionless_type>::type>>>,boost::units::dimensionless_type>>
1>          ]
1>          c:workspaceexternalsboost_1_57_0includeboostunitsdetaillinear_algebra.hpp(538) : see reference to class template instantiation 'boost::units::detail::determine_extra_equations<3,false>::apply<Matrix,3,Matrix>' being compiled
1>          with
1>          [
1>              Matrix=boost::units::list<boost::units::list<boost::units::static_rational<0,1>,boost::units::list<boost::units::static_rational<0,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::detail::make_zero_vector<0>::type>>>,boost::units::list<boost::units::list<boost::units::static_rational<-1,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::list<boost::units::static_rational<-2,1>,boost::units::detail::expand_dimensions<0>::apply<boost::units::dimensionless_type,boost::units::dimensionless_type>::type>>>,boost::units::dimensionless_type>>
1>          ]
1>          c:workspaceexternalsboost_1_57_0includeboostunitsdetaillinear_algebra.hpp(828) : see reference to class template instantiation 'boost::units::detail::make_square_and_invert<boost::units::list<boost::units::list<boost::units::static_rational<0,1>,boost::units::list<boost::units::static_rational<0,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::detail::make_zero_vector<0>::type>>>,boost::units::list<boost::units::list<boost::units::static_rational<-1,1>,boost::units::list<boost::units::static_rational<1,1>,boost::units::list<boost::units::static_rational<-2,1>,boost::units::detail::expand_dimensions<0>::apply<boost::units::dimensionless_type,boost::units::dimensionless_type>::type>>>,boost::units::dimensionless_type>>>' being compiled
1>          c:workspaceexternalsboost_1_57_0includeboostunitsdetaillinear_algebra.hpp(1032) : see reference to class template instantiation 'boost::units::detail::normalize_units<T>' being compiled
1>          with
1>          [
1>              T=boost::units::list<boost::units::scaled_base_unit<boost::units::si::second_base_unit,boost::units::scale<60,boost::units::static_rational<1,1>>>,boost::units::list<boost::units::metric::bar_base_unit,boost::units::dimensionless_type>>
1>          ]
1>          c:workspaceexternalsboost_1_57_0includeboostunitsdetaillinear_algebra.hpp(1051) : see reference to class template instantiation 'boost::units::detail::calculate_base_unit_exponents_impl<false>::apply<T,Dimensions>' being compiled
1>          with
1>          [
1>              T=boost::units::list<boost::units::scaled_base_unit<boost::units::si::second_base_unit,boost::units::scale<60,boost::units::static_rational<1,1>>>,boost::units::list<boost::units::metric::bar_base_unit,boost::units::dimensionless_type>>
1>  ,            Dimensions=BSII::Units::pressure_roc_dimension
1>          ]
1>          c:workspaceexternalsboost_1_57_0includeboostunitsheterogeneous_system.hpp(243) : see reference to class template instantiation 'boost::units::detail::calculate_base_unit_exponents<boost::units::list<boost::units::scaled_base_unit<boost::units::si::second_base_unit,boost::units::scale<60,boost::units::static_rational<1,1>>>,boost::units::list<T,boost::units::dimensionless_type>>,Dimensions>' being compiled
1>          with
1>          [
1>              T=boost::units::metric::bar_base_unit
1>  ,            Dimensions=BSII::Units::pressure_roc_dimension
1>          ]
1>          c:workspaceexternalsboost_1_57_0includeboostunitsunit.hpp(92) : see reference to class template instantiation 'boost::units::detail::make_heterogeneous_system<Dim,System>' being compiled
1>          with
1>          [
1>              Dim=BSII::Units::pressure_roc_dimension
1>  ,            System=boost::units::homogeneous_system<boost::units::list<boost::units::scaled_base_unit<boost::units::si::second_base_unit,boost::units::scale<60,boost::units::static_rational<1,1>>>,boost::units::list<boost::units::metric::bar_base_unit,boost::units::dimensionless_type>>>
1>          ]
1>          c:workspaceexternalsboost_1_57_0includeboostunitsunit.hpp(99) : see reference to class template instantiation 'boost::units::reduce_unit<S1>' being compiled
1>          with
1>          [
1>              S1=BSII::Units::bar_per_minute_unit
1>          ]
1>          c:workspacefoundationssw_foundationsbsii_commontestsrcunitsunits_pressure_test.cpp(97) : see reference to class template instantiation 'boost::units::is_implicitly_convertible<BSII::Units::bar_per_minute_unit,Unit>' being compiled
1>          with
1>          [
1>              Unit=BSII::Units::bar_per_minute_unit
1>          ]

根据 Boost 文档,均匀系统只能由线性独立的基本单元组成。就我而言,我正在尝试将条形图(反过来"包含"秒作为时间元素(与分钟混合在一起。这对我来说听起来有问题。但另一方面,由于我的系统中不包括质量和长度基本单位,在我看来,基数毕竟是独立的。

无论如何,我在网上搜索了创建这样一个异构单元的示例,但没有找到任何可以理解的内容。此外,我在 Boost 文档中读到,异构单元不会保留有关其创建方式的信息。这是否意味着我将无法将BarPerMinuteRoC乘以Minute并取回Bar?

这是库中的错误。 您的代码应该可以工作,并且在当前的 GIT 开发分支中确实可以工作。