Skip to content

bigdavedev/units

Repository files navigation

units

Build Status Build status Coverage Status

Purpose

This units library strives to provide typesafe code for representing any kind of numerical unit (distance, volume, mass, etc) in C++ that are interoperable with the existing std::chrono implementation. Units strives to pure compile time where that is appropriate. In addition, use of user-defined literals are used to allow for more human-like representation of units.

auto distance = 1_m;

yieds:

units::distance<double> distance

Examples

Create a unit representing 2500 metres:

auto distance = 2500_m;
std::cout << distance.count() << std::endl; // 2500.0

Add 31 metres:

distance += 31_m;
std::cout << distance.count() << std::endl; // 2531.0

Convert to kilometres:

auto kilometres = units::distance_cast<units::kilometres>(distance);
std::cout << kilometres.count() << std::endl; // 2.531

Get fractional part of kilometres as metres:

auto metres = kilometres % 1_km;
std::cout << metres.count() << std::endl; // 531.0

Convert to feet:

auto feet = units::distance_cast<units::feet>(metres);
std::cout << feet.count() << std::endl; // 1742.13

Note that the default underlying type of the units class is double but you can easily change that yourself:

using metres_i = units::distance<int>;
metres_i foo{1234};
std::cout << foo.count() << std::endl; // 1234

About

Typesafe units for C++14 and beyond

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors