2011-10-03 17 views
9

Actualmente estoy usando boost :: units para representar el torque en unidades si, sin embargo, me da el par en libras. Estoy intentando crear una unidad de torque pound_foot y una conversión para apoyar esto. Mi intento perezoso era simplemente definir:Cómo agregar su propia unidad base y conversiones usando boost :: units

BOOST_STATIC_CONST(boost::si::torque, pound_feet = 1.3558179483314 * si::newton_meters); 

y luego hacer:

boost::si::torque torque = some_value * pound_feet; 

Pero esto se siente insatisfactoria. Mi segundo intento fue intentar definir una nueva unidad base llamada pound_foot (ver abajo). Pero cuando intento usarlo de una manera similar a la anterior (con un lanzamiento a la unidad si) obtengo una página llena de errores. ¿Alguna sugerencia sobre el enfoque correcto?

namespace us { 
    struct pound_foot_base_unit : base_unit<pound_foot_base_unit, torque_dimension> { }; 
    typedef units::make_system< 
      pound_foot_base_unit>::type us_system; 
    typedef unit<torque_dimension, us_system> torque; 
    BOOST_UNITS_STATIC_CONSTANT(pound_foot, torque); 
    BOOST_UNITS_STATIC_CONSTANT(pound_feet, torque);   
} 
BOOST_UNITS_DEFINE_CONVERSION_FACTOR(us::torque, 
            boost::units::si::torque, 
            double, 1.3558179483314); 

Respuesta

6

pies libra no es realmente una unidad de base, así que es mejor ir con la forma limpia y lo definen en términos de las unidades básicas, que son los pies y libras:

#include <boost/units/base_units/us/pound_force.hpp> 
#include <boost/units/base_units/us/foot.hpp> 
#include <boost/units/systems/si/torque.hpp> 
#include <boost/units/quantity.hpp> 
#include <boost/units/io.hpp> 
#include <iostream> 

namespace boost { 
namespace units { 
namespace us { 

typedef make_system< foot_base_unit, pound_force_base_unit >::type system; 
typedef unit< torque_dimension, system > torque; 

BOOST_UNITS_STATIC_CONSTANT(pound_feet,torque); 

} 
} 
} 

using namespace boost::units; 

int main() { 
    quantity<us::torque> colonial_measurement(1.0 * us::pound_feet); 
    std::cerr << quantity<si::torque>(colonial_measurement) << std::endl; 
    return 0; 
} 

Este programa calcula el factor de conversión de los valores conocidos de pie y libra, la salida es 1.35582 m^2 kg s^-2 rad^-1. Por favor, permítanme, no obstante, burlarme de la inferioridad del sistema imperial.

+0

Funciona como un encanto, gracias. –

Cuestiones relacionadas