Files
mp-units/docs/getting_started/quick_start.md

89 lines
2.2 KiB
Markdown
Raw Normal View History

2023-06-21 10:55:18 +02:00
# 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 quantity is created by multiplying a number with a predefined unit:
```cpp
#include <mp-units/systems/si/si.h>
using namespace mp_units;
quantity q = 42 * si::metre;
2023-06-21 10:55:18 +02:00
```
!!! note
The above spelling of `metre` is not a typo. For motivation, please check our
2023-08-03 21:23:34 +02:00
[FAQ](faq.md#why-do-we-spell-metre-instead-of-meter).
2023-06-21 10:55:18 +02:00
The above creates an instance of `quantity<si::metre(), int>`. The same can be obtained using
an optional unit symbol:
```cpp
#include <mp-units/systems/si/si.h>
using namespace mp_units;
using namespace mp_units::si::unit_symbols;
quantity q = 42 * m;
2023-06-21 10:55:18 +02:00
```
!!! tip
2023-06-21 10:55:18 +02:00
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:
```cpp
#include <mp-units/systems/si/si.h>
using namespace mp_units;
quantity q = make_quantity<si::metre>(42);
```
2023-06-21 10:55:18 +02:00
## User-provided unit wrappers
Sometimes it might be awkward to type some derived units:
```cpp
quantity speed = 60 * (km / h);
2023-06-21 10:55:18 +02:00
```
!!! note
Please note that `60 * km / h` will not compile. To read more about the rationale for such
2023-08-03 21:23:34 +02:00
a design please check our [FAQ](faq.md#why-dont-we-use-udls-to-create-a-quantity).
2023-06-21 10:55:18 +02:00
In case such a unit is used a lot in the project, a user can easily provide a nicely named
wrapper for it with:
```cpp
constexpr auto kmph = km / h;
quantity speed = 60 * kmph;
2023-06-21 10:55:18 +02:00
```
or even:
```cpp
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;
2023-06-21 10:55:18 +02:00
```
!!! note
In case you wonder why this library does not use UDLs to create quantities, please check
2023-08-03 21:23:34 +02:00
our [FAQ](faq.md#why-dont-we-use-udls-to-create-quantities).