
Hi list,
I am having trouble converting from one derived_dimension to another across systems (imperial to metric). I'd like to convert, say, lb/in to, say, kg/m. I thought I would do the following but get a compiler error #:
*.h-------------------------------------------------------------------------------- namespace dimensional_analysis { namespace lineal_force { //lb/in typedef boost::units::derived_dimension< boost::units::us::pound_force_base_unit, 1, boost::units::us::inch_base_unit, -1 >::type lb_per_inch_dimension; typedef boost::units::unit< lb_per_inch_dimension, dimensional_analysis::lengths::ip_system > lb_per_inch_unit; typedef boost::units::quantity<lb_per_inch_unit, double> lb_per_inch_quantity; BOOST_UNITS_STATIC_CONSTANT(lbpin, lb_per_inch_quantity); //kg/m typedef boost::units::derived_dimension< boost::units::si::kilogram_base_unit, 1, boost::units::si::meter_base_unit, -1 >::type kg_per_meter_dimension; typedef boost::units::unit< kg_per_meter_dimension, boost::units::si::system > kg_per_meter_unit; typedef boost::units::quantity<kg_per_meter_unit, double> kg_per_meter_unit_quantity; BOOST_UNITS_STATIC_CONSTANT(kgpm, kg_per_meter_unit_quantity); }//lineal_force }//dimensional_analysis
*.cp ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //Do I need these? BOOST_UNITS_DEFINE_CONVERSION_FACTOR(dimensional_analysis::lineal_force::kg_per_meter_unit, dimensional_analysis::lineal_force::lb_per_inch_unit, double, 0.0559974); // exact conversion BOOST_UNITS_DEFAULT_CONVERSION(dimensional_analysis::lineal_force::kg_per_meter_unit, dimensional_analysis::lineal_force::lb_per_inch_unit);
//This does not compile# const auto conv_factor_try0 = conversion_factor(dimensional_analysis::lineal_force::kg_per_meter_unit::unit_type(), dimensional_analysis::lineal_force::lb_per_inch_unit::unit_type());
# *\boost_1_68_0\boost\units\detail\conversion_impl.hpp(340): error C2672: 'conversion_factor': no matching overloaded function found (compiling source file...*.cpp)
Any help is appreciated
I opened a PR (https://github.com/boostorg/units/pull/32) to address such a situation; the following code ```cpp #include <iostream> #include <boost/units/base_units/us/inch.hpp> #include <boost/units/base_units/us/pound_force.hpp> #include <boost/units/io.hpp> #include <boost/units/physical_dimensions.hpp> #include <boost/units/systems/si.hpp> int main() { auto force_us{1.0 * boost::units::us::pound_force}; auto length_us{1.0 * boost::units::us::inch}; boost::units::quantity<boost::units::si::force, double> force_si{force_us}; boost::units::quantity<boost::units::si::length, double> length_si{length_us}; std::cout << force_us << " = " << force_si << '\n'; std::cout << length_us << " = " << length_si << '\n'; std::cout << force_us / length_us << " = " << force_si / length_si << '\n'; return 0; } ``` will print ``` 1 lbf = 4.44822 m kg s^-2 1 in = 0.0254 m 1 lbf in^-1 = 175.127 kg s^-2 ``` Best -- Eisuke Kawashima