如何将米和毫米分配给相同的boost :: units变量?

问题描述:

我想分配米和毫米来提升::单位变量。但是,似乎boost ::单位不容易从毫米转换为米。 我正在使用的代码是如何将米和毫米分配给相同的boost :: units变量?

boost::units::quantity<boost::units::si::length> lenA = 2.0 * boost::units::si::metres; 
boost::units::quantity<boost::units::si::length> lenB = static_cast<tracking::units::Length>(2.0 * boost::units::si::milli * boost::units::si::metres); 

(使用的static_cast),但我想放弃演员和只使用

boost::units::quantity<boost::units::si::length> lenA = 2.0 * boost::units::si::metres; 
boost::units::quantity<boost::units::si::length> lenB = 2.0 * boost::units::si::milli * boost::units::si::metres; 

我如何做到这一点(或至少更容易代码)?

+0

什么是'跟踪::单位:: Length'?顺便说一下,如果你想要“更容易编码”,也许只需要使用int64_t毫米作为你的标准单位或其他东西。任何事情都会比这更容易! – 2014-10-09 00:56:56

+0

这有帮助吗? http://*.com/questions/14724063/millimeters-in-boostunits – sehe 2014-10-09 09:13:20

+0

另外,与FAQ条目http://www.boost.org/doc/libs/1_56_0/doc/html/boost_units/FAQ.html# boost_units.FAQ.NoConstructorFromValueType – sehe 2014-10-09 09:19:38

您应该包括<boost/units/systems/si/prefixes.hpp>。 它可以让你使用前缀:

quantity<length> len2(2.0 * milli * meter); 

示例代码:

#include <stdlib.h> 
#include <string> 
#include <iostream> 
#include <boost/units/systems/si/prefixes.hpp> 
#include <boost/units/systems/si/length.hpp> 
#include <boost/units/systems/si/io.hpp> 

using namespace std; 
using namespace boost::units; 
using namespace boost::units::si; 
using namespace boost; 

int main(int argc, char* argv[]) { 

    quantity<length> len1(2.0 * meter); 
    quantity<length> len2(2.0 * milli * meter); 
    quantity<length> len3(2.0 * centi * meter); 

    cout << len1 << endl << len2 << endl << len3 << endl; 

    return EXIT_SUCCESS; 
} 

,其结果是:

2 m 
0.002 m 
0.02 m