
On Thu, Mar 3, 2011 at 4:58 PM, Matthias Schabel <boost@schabel-family.org> wrote:
Why don't you give a code snippet that does what you want to do?
using namespace boost::units;
class Test { public: void setX(quantity<si::length> const& x) { m_X = x; } private: quantity<si::length> m_X; };
int main(int, char const *[]) {
typedef boost::units::us::foot_base::unit_type foot_unit; static const foot_unit foot;
Test a;
quantity<si::length> first (1.0 * si::meter); quantity<foot_unit> second(1.0 * foot); quantity<boost::units::si::meter_base_unit::unit_type> third (1.0 * si::meter);
a.setX(first); a.setX(second); a.setX(third);
return 0; }
#include <boost/units/quantity.hpp> #include <boost/units/systems/si.hpp> #include <boost/units/base_units/us/foot.hpp> using namespace boost::units; class Test { public: // takes any unit of length template<class System> void setX(quantity<unit<length_dimension,System> > const& x) { // explicit conversion to si::length = meters m_X = quantity<si::length>(x); } private: quantity<si::length> m_X; }; int main(int, char const *[]) { typedef boost::units::us::foot_base_unit::unit_type foot_unit; static const foot_unit foot; Test a; quantity<si::length> first (1.0 * si::meter); quantity<foot_unit> second(1.0 * foot); quantity<boost::units::si::meter_base_unit::unit_type> third (1.0 * si::meter); a.setX(first); a.setX(second); a.setX(third); return 0; }