Quick Start¶
A quantity is a concrete amount of a unit for a quantity type of a specified dimension with a
specific representation, and is represented in the library with a quantity
class template.
Creating a quantity¶
The SI Brochure says:
SI Brochure
The value of the quantity is the product of the number and the unit. The space between the number and the unit is regarded as a multiplication sign (just as a space between units implies multiplication).
Following the above, the value of a quantity in the mp-units library is created by multiplying a number with a predefined unit:
Note
The above spelling of metre
is not a typo. For motivation, please check our
FAQ.
The above creates an instance of quantity<si::metre(), int>
. The same can be obtained using
an optional unit symbol:
#include <mp-units/systems/si/si.h>
using namespace mp_units;
using namespace mp_units::si::unit_symbols;
quantity q = 42 * m;
Tip
Unit symbols introduce a lot of short identifiers into the current namespace, and that is
why they are opt-in. A user has to explicitly "import" them from a dedicated unit_symbols
namespace.
In case someone doesn't like the multiply syntax or there is an ambiguity between operator*
provided by this and other libraries, a quantity can also be created with a dedicated factory
function:
#include <mp-units/systems/si/si.h>
using namespace mp_units;
quantity q = make_quantity<si::metre>(42);
User-provided unit wrappers¶
Sometimes it might be awkward to type some derived units:
Note
Please note that 60 * km / h
will not compile. To read more about the rationale for such
a design please check our FAQ.
In case such a unit is used a lot in the project, a user can easily provide a nicely named wrapper for it with:
or even:
constexpr auto kilometre = si::kilo<si::metre>;
constexpr auto kilometre_per_hour = kilometre / si::hour;
constexpr auto kmph = kilometre_per_hour;
quantity speed = 60 * kmph;
Note
In case you wonder why this library does not use UDLs to create quantities, please check our FAQ.