我想对某些SI指标使用boost::units。然而我们的代码主要处理毫米而不是使用

quantity<length> value = 1*milli*meter;

我们更喜欢这样的东西
quantity<length> value = 1*millimeter;

但是我不确定如何定义“毫米”(不使用#define)。

其次,使用前缀单位的开销是多少?

更新:此程序必须在没有C++ 11功能(即没有UDL)的情况下运行

最佳答案

我正在使用以下方法:

// your namespace name for units
namespace outernamespace {
    namespace millimeter_system {
        typedef boost::units::scaled_base_unit<boost::units::si::meter_base_unit, boost::units::scale<10, boost::units::static_rational<-3>>> millimeter_base_unit;

        typedef boost::units::make_system<millimeter_base_unit>::type system;
        typedef boost::units::unit<boost::units::length_dimension, system> length;

        BOOST_UNITS_STATIC_CONSTANT(millimeter, length);
        BOOST_UNITS_STATIC_CONSTANT(millimeters, length);
    }

    typedef boost::units::quantity<millimeter_system::length> quantity_millimeter;
    using millimeter_system::millimeter;
    using millimeter_system::millimeters;
}

// demonstration of usage
void foo() {
    using namespace outernamespace;
    using namespace boost::units;
    using namespace boost::units::si;

    quantity_millimeter mm = 5 * millimeter;
    quantity<boost::units::si::length> m = 0.004 * meter;
    if (mm < static_cast<quantity_millimeter>(m)) {
        std::cout << 'lt ' << std::endl;
    }
    else {
        std::cout << 'geq ' << std::endl;
    }
}

关于c++ - 以毫米为单位的 boost::units,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14724063/

10-10 20:10