| 
									
										
										
										
											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; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | auto q = 42 * si::metre; | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | !!! 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; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | auto q = 42 * m; | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | !!! note | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-29 15:09:19 +01:00
										 |  |  | 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; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | auto 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 | 
					
						
							|  |  |  | auto speed = 60 * (km / h); | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | !!! 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; | 
					
						
							|  |  |  | auto speed = 60 * kmph; | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | or even: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```cpp | 
					
						
							|  |  |  | constexpr auto kilometre = si::kilo<si::metre>; | 
					
						
							|  |  |  | constexpr auto kilometre_per_hour = kilometre / si::hour; | 
					
						
							|  |  |  | constexpr auto kmph = kilometre_per_hour; | 
					
						
							|  |  |  | auto speed = 60 * kmph; | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | !!! 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). |