mirror of
https://github.com/mpusz/mp-units.git
synced 2025-07-31 19:04:27 +02:00
docs: code samples with quantity_spec
definitions now have 3 versions
This commit is contained in:
@@ -95,12 +95,30 @@ including:
|
|||||||
|
|
||||||
`QuantitySpec` can be defined by the user in one of the following ways:
|
`QuantitySpec` can be defined by the user in one of the following ways:
|
||||||
|
|
||||||
|
=== "C++20"
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
inline constexpr struct length : quantity_spec<length, dim_length> {} length;
|
||||||
|
inline constexpr struct height : quantity_spec<height, length> {} height;
|
||||||
|
inline constexpr struct speed : quantity_spec<speed, length / time> {} speed;
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "C++23"
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
inline constexpr struct length : quantity_spec<dim_length> {} length;
|
inline constexpr struct length : quantity_spec<dim_length> {} length;
|
||||||
inline constexpr struct height : quantity_spec<length> {} height;
|
inline constexpr struct height : quantity_spec<length> {} height;
|
||||||
inline constexpr struct speed : quantity_spec<length / time> {} speed;
|
inline constexpr struct speed : quantity_spec<length / time> {} speed;
|
||||||
```
|
```
|
||||||
|
|
||||||
|
=== "Portable"
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
QUANTITY_SPEC(length, dim_length);
|
||||||
|
QUANTITY_SPEC(height, length);
|
||||||
|
QUANTITY_SPEC(speed, length / time);
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## `Unit`
|
## `Unit`
|
||||||
|
|
||||||
|
@@ -94,10 +94,26 @@ Also, it explicitly states that:
|
|||||||
To specify that a specific quantity has a vector or tensor character a value of `quantity_character`
|
To specify that a specific quantity has a vector or tensor character a value of `quantity_character`
|
||||||
enumeration can be appended to the `quantity_spec` describing such a quantity type:
|
enumeration can be appended to the `quantity_spec` describing such a quantity type:
|
||||||
|
|
||||||
```cpp
|
=== "C++20"
|
||||||
inline constexpr struct position_vector : quantity_spec<length, quantity_character::vector> {} position_vector;
|
|
||||||
inline constexpr struct displacement : quantity_spec<length, quantity_character::vector> {} displacement;
|
```cpp
|
||||||
```
|
inline constexpr struct position_vector : quantity_spec<position_vector, length, quantity_character::vector> {} position_vector;
|
||||||
|
inline constexpr struct displacement : quantity_spec<displacement, length, quantity_character::vector> {} displacement;
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "C++23"
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
inline constexpr struct position_vector : quantity_spec<length, quantity_character::vector> {} position_vector;
|
||||||
|
inline constexpr struct displacement : quantity_spec<length, quantity_character::vector> {} displacement;
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Portable"
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
QUANTITY_SPEC(position_vector, length, quantity_character::vector);
|
||||||
|
QUANTITY_SPEC(displacement, length, quantity_character::vector);
|
||||||
|
```
|
||||||
|
|
||||||
With the above, all the quantities derived from `position_vector` or `displacement` will have a correct
|
With the above, all the quantities derived from `position_vector` or `displacement` will have a correct
|
||||||
character determined according to the kind of operations included in the
|
character determined according to the kind of operations included in the
|
||||||
@@ -107,9 +123,23 @@ character determined according to the kind of operations included in the
|
|||||||
For example, `velocity` in the below definition will be defined as a vector quantity (no explicit
|
For example, `velocity` in the below definition will be defined as a vector quantity (no explicit
|
||||||
character override is needed):
|
character override is needed):
|
||||||
|
|
||||||
```cpp
|
=== "C++20"
|
||||||
inline constexpr struct velocity : quantity_spec<speed, position_vector / duration> {} velocity;
|
|
||||||
```
|
```cpp
|
||||||
|
inline constexpr struct velocity : quantity_spec<velocity, speed, position_vector / duration> {} velocity;
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "C++23"
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
inline constexpr struct velocity : quantity_spec<speed, position_vector / duration> {} velocity;
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Portable"
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
QUANTITY_SPEC(velocity, speed, position_vector / duration);
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
## Representation types for vector and tensor quantities
|
## Representation types for vector and tensor quantities
|
||||||
|
@@ -121,25 +121,71 @@ from such an instantiation.
|
|||||||
|
|
||||||
For example, here is how the above quantity kind tree can be modeled in the library:
|
For example, here is how the above quantity kind tree can be modeled in the library:
|
||||||
|
|
||||||
```cpp
|
=== "C++20"
|
||||||
inline constexpr struct length : quantity_spec<dim_length> {} length;
|
|
||||||
inline constexpr struct width : quantity_spec<length> {} width;
|
```cpp
|
||||||
inline constexpr auto breadth = width;
|
inline constexpr struct length : quantity_spec<length, dim_length> {} length;
|
||||||
inline constexpr struct height : quantity_spec<length> {} height;
|
inline constexpr struct width : quantity_spec<width, length> {} width;
|
||||||
inline constexpr auto depth = height;
|
inline constexpr auto breadth = width;
|
||||||
inline constexpr auto altitude = height;
|
inline constexpr struct height : quantity_spec<height, length> {} height;
|
||||||
inline constexpr struct thickness : quantity_spec<width> {} thickness;
|
inline constexpr auto depth = height;
|
||||||
inline constexpr struct diameter : quantity_spec<width> {} diameter;
|
inline constexpr auto altitude = height;
|
||||||
inline constexpr struct radius : quantity_spec<width> {} radius;
|
inline constexpr struct thickness : quantity_spec<thickness, width> {} thickness;
|
||||||
inline constexpr struct radius_of_curvature : quantity_spec<radius> {} radius_of_curvature;
|
inline constexpr struct diameter : quantity_spec<diameter, width> {} diameter;
|
||||||
inline constexpr struct path_length : quantity_spec<length> {} path_length;
|
inline constexpr struct radius : quantity_spec<radius, width> {} radius;
|
||||||
inline constexpr auto arc_length = path_length;
|
inline constexpr struct radius_of_curvature : quantity_spec<radius_of_curvature, radius> {} radius_of_curvature;
|
||||||
inline constexpr struct distance : quantity_spec<path_length> {} distance;
|
inline constexpr struct path_length : quantity_spec<path_length, length> {} path_length;
|
||||||
inline constexpr struct radial_distance : quantity_spec<distance> {} radial_distance;
|
inline constexpr auto arc_length = path_length;
|
||||||
inline constexpr struct wavelength : quantity_spec<length> {} wavelength;
|
inline constexpr struct distance : quantity_spec<distance, path_length> {} distance;
|
||||||
inline constexpr struct position_vector : quantity_spec<length, quantity_character::vector> {} position_vector;
|
inline constexpr struct radial_distance : quantity_spec<radial_distance, distance> {} radial_distance;
|
||||||
inline constexpr struct displacement : quantity_spec<length, quantity_character::vector> {} displacement;
|
inline constexpr struct wavelength : quantity_spec<wavelength, length> {} wavelength;
|
||||||
```
|
inline constexpr struct position_vector : quantity_spec<position_vector, length, quantity_character::vector> {} position_vector;
|
||||||
|
inline constexpr struct displacement : quantity_spec<displacement, length, quantity_character::vector> {} displacement;
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "C++23"
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
inline constexpr struct length : quantity_spec<dim_length> {} length;
|
||||||
|
inline constexpr struct width : quantity_spec<length> {} width;
|
||||||
|
inline constexpr auto breadth = width;
|
||||||
|
inline constexpr struct height : quantity_spec<length> {} height;
|
||||||
|
inline constexpr auto depth = height;
|
||||||
|
inline constexpr auto altitude = height;
|
||||||
|
inline constexpr struct thickness : quantity_spec<width> {} thickness;
|
||||||
|
inline constexpr struct diameter : quantity_spec<width> {} diameter;
|
||||||
|
inline constexpr struct radius : quantity_spec<width> {} radius;
|
||||||
|
inline constexpr struct radius_of_curvature : quantity_spec<radius> {} radius_of_curvature;
|
||||||
|
inline constexpr struct path_length : quantity_spec<length> {} path_length;
|
||||||
|
inline constexpr auto arc_length = path_length;
|
||||||
|
inline constexpr struct distance : quantity_spec<path_length> {} distance;
|
||||||
|
inline constexpr struct radial_distance : quantity_spec<distance> {} radial_distance;
|
||||||
|
inline constexpr struct wavelength : quantity_spec<length> {} wavelength;
|
||||||
|
inline constexpr struct position_vector : quantity_spec<length, quantity_character::vector> {} position_vector;
|
||||||
|
inline constexpr struct displacement : quantity_spec<length, quantity_character::vector> {} displacement;
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Portable"
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
QUANTITY_SPEC(length, dim_length);
|
||||||
|
QUANTITY_SPEC(width, length);
|
||||||
|
inline constexpr auto breadth = width;
|
||||||
|
QUANTITY_SPEC(height, length);
|
||||||
|
inline constexpr auto depth = height;
|
||||||
|
inline constexpr auto altitude = height;
|
||||||
|
QUANTITY_SPEC(thickness, width);
|
||||||
|
QUANTITY_SPEC(diameter, width);
|
||||||
|
QUANTITY_SPEC(radius, width);
|
||||||
|
QUANTITY_SPEC(radius_of_curvature, radius);
|
||||||
|
QUANTITY_SPEC(path_length, length);
|
||||||
|
inline constexpr auto arc_length = path_length;
|
||||||
|
QUANTITY_SPEC(distance, path_length);
|
||||||
|
QUANTITY_SPEC(radial_distance, distance);
|
||||||
|
QUANTITY_SPEC(wavelength, length);
|
||||||
|
QUANTITY_SPEC(position_vector, length, quantity_character::vector);
|
||||||
|
QUANTITY_SPEC(displacement, length, quantity_character::vector);
|
||||||
|
```
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user