(C++) Boost.Units
August 7, 2019 ยท View on GitHub
Boost.Units is the Boost library to specify SI units (meter, kilogram, second, ampere, kelvin, candela, mole) for values. This allows the compiler to check your calculations at compile-time.
Example
In the example below, two lengths are added with success. Also the compiler prevented the adding of a force and a length.
#include <iostream>
#include <boost/units/systems/si.hpp>
#include <boost/units/systems/si/prefixes.hpp>
#include <boost/units/io.hpp>
int main()
{
//Create a length
boost::units::quantity<boost::units::si::length> m(1.0 * boost::units::si::meter);
//Create another length
boost::units::quantity<boost::units::si::length> n(1.0 * boost::units::si::milli * boost::units::si::meter);
//Create a force
boost::units::quantity<boost::units::si::force> f(1.0 * boost::units::si::newton);
//Add the two lengths
std::cout << (m + n); //OKAY: can add meters to meters
//Try to add force to a length
//std::cout << (m + f); //FAILS: cannot add newtons to meters
}