Boost Units

One of the BoostLibraries

A brilliant example of the power of Static Typing. An extensible framework for compile-time dimensional analysis in C++ with no runtime overhead.

http://boost.org/libs/units

Example:

 /// the ideal gas law in si units
 template<class Y>
 quantity<si::amount,Y> 
 idealGasLaw(const quantity<si::pressure,Y>& P,
             const quantity<si::volume,Y>& V,
             const quantity<si::temperature,Y>& T)
 {
     using namespace boost::units::si;

#if BOOST_UNITS_HAS_TYPEOF using namespace constants::codata; return (P*V/(R*T)); #else return P*V/(8.314472*(joules/(kelvin*mole))*T); #endif // BOOST_UNITS_HAS_TYPEOF }

Which is used as follows:

 /// test ideal gas law
 quantity<temperature>   T = (273.+37.)*kelvin;
 quantity<pressure>      P = 1.01325e5*pascals;
 quantity<length>        r = 0.5e-6*meters;
 quantity<volume>        V = (4.0/3.0)*3.141592*pow<3>(r);
 quantity<amount>        n(idealGasLaw(P,V,T));

Note that defining the base units is sufficient to use any plausible derived unit.

See also StaticTypeSafety


CategoryBoost CategoryCpp CategoryCppTemplates CategoryMetaprogramming


EditText of this page (last edited May 28, 2009) or FindPage with title or text search