Boost-Units



  • Hallo,

    ich würde gerne Boost Units nutzen, um mich der ständigen Uneindeutigkeiten bzgl. Einheiten zu entledigen. Allerdings bereitet mir der Umgang damit Probleme - wirklich Hilfreiches habe ich auch nicht im Internet gefunden.

    Beispielhaft sind hier mal Grad und Radiant definiert:

    typedef boost::units::si::plane_angle radian;
    using boost::units::si::radians;
    
    #include <boost/units/systems/angle/degrees.hpp>
    typedef boost::units::degree::plane_angle degree;
    using boost::units::degree::degrees;
    
    typedef boost::units::quantity<radian> Radian;
    typedef boost::units::quantity<degree> Degree;
    
    Radian operator+(const Radian &rad, const Degree &deg)  { return Radian(deg) + rad; }
    Radian operator+(const Degree &deg, const Radian &rad)  { return Radian(deg) + rad; }
    

    Wenn ich nun innerhalb des Einheitensystems rechnen will, klappt das problemlos:

    Degree d1(10.f*degrees);
    Degree d2(20.f*degrees);
    cout << (d1+d2) << endl;
    

    Ausgabe:

    30 deg
    

    Wenn ich nun aber einen konstanten Faktor in die Rechnung einbeziehen will, z.B. ein Float, dann bekomme ich Probleme. Ich habe leider auch keine Ahnung, wie ich die Einheit in eine normale Zahl zurück-casten kann. Ich hoffe ihr könnt meine Verständnisprobleme schnell beseitigen.



  • Ok, hab es herausgefunden:

    Degree deg(35.f*degrees);
    float angle = static_cast<float>(deg.value())
    

    Edit: Den Cast kann man sich auch einfach sparen an dieser Stelle.


Anmelden zum Antworten