OGLplus  (0.59.0) a C++ wrapper for rendering APIs

Value of type T with a specified unit or tag type U. More...

#include <eagine/tagged_quantity.hpp>

Public Types

using unit_type = U
 Alias for the unit type.
 
using value_type = T
 Alias for the value type.
 

Public Member Functions

 tagged_quantity ()=default
 Default constructor.
 
constexpr tagged_quantity (T v) noexcept
 Explicit constructor initializing the value.
 
template<typename X , typename UX , typename = std::enable_if_t< std::is_convertible_v<X, T> && units::is_convertible_v<UX, U>>>
constexpr tagged_quantity (const tagged_quantity< X, UX > &tq) noexcept
 Converting constructor from another tagged quantity.
 
template<typename UX , typename = std::enable_if_t<units::is_convertible_v<U, UX>>>
constexpr auto to () const noexcept
 Conversion to a quantity in another unit type.
 
constexpr auto value () const noexcept -> T
 Returns the value.
 
template<typename X , typename = std::enable_if_t<std::is_convertible_v<T, X>>>
constexpr operator X () const noexcept
 Brief Explicit conversion of the value to the specified.
 
template<typename X , typename UX , typename = std::enable_if_t< std::is_convertible_v<X, T> && units::is_convertible_v<UX, U>>>
auto operator+= (const tagged_quantity< X, UX > &q) noexcept -> auto &
 Addition of another tagged quantity.
 
template<typename X , typename UX , typename = std::enable_if_t< std::is_convertible_v<X, T> && units::is_convertible_v<UX, U>>>
auto operator-= (const tagged_quantity< X, UX > &q) noexcept -> auto &
 Subtraction of another tagged quantity.
 

Static Public Member Functions

static constexpr auto unit () noexcept -> U
 Returns the unit.
 

Related Functions

(Note that these are not member functions.)

template<typename Qty , typename = std::enable_if_t<is_convertible_quantity_v<Qty, units::radian>>>
static constexpr auto sin (const Qty &qty)
 Overload of sine for quantities of angle. More...
 
template<typename Qty , typename = std::enable_if_t<is_convertible_quantity_v<Qty, units::radian>>>
static constexpr auto cos (const Qty &qty)
 Overload of cosine for quantities of angle. More...
 
template<typename Qty , typename = std::enable_if_t<is_convertible_quantity_v<Qty, units::radian>>>
static constexpr auto tan (const Qty &qty)
 Overload of tangens for quantities of angle. More...
 
template<typename T >
static constexpr auto arcsin (T x)
 Overload of arc sine for quantities of angle. More...
 
template<typename T >
static constexpr auto arccos (T x)
 Overload of arc cosine for quantities of angle. More...
 
template<typename T >
static constexpr auto arctan (T y, T x)
 Overload of tangens for quantities of angle. More...
 
template<typename T1 , typename U1 , typename T2 , typename U2 >
constexpr auto operator== (const tagged_quantity< T1, U1 > &a, const tagged_quantity< T2, U2 > &b) -> std::enable_if_t< units::is_convertible_v< U2, U1 >, bool >
 Equality comparison.
 
template<typename T1 , typename U1 , typename T2 , typename U2 >
constexpr auto operator!= (const tagged_quantity< T1, U1 > &a, const tagged_quantity< T2, U2 > &b) -> std::enable_if_t< units::is_convertible_v< U2, U1 >, bool >
 Nonequality comparison.
 
template<typename T1 , typename U1 , typename T2 , typename U2 >
constexpr auto operator< (const tagged_quantity< T1, U1 > &a, const tagged_quantity< T2, U2 > &b) -> std::enable_if_t< units::is_convertible_v< U2, U1 >, bool >
 Less-than comparison.
 
template<typename T1 , typename U1 , typename T2 , typename U2 >
constexpr auto operator<= (const tagged_quantity< T1, U1 > &a, const tagged_quantity< T2, U2 > &b) -> std::enable_if_t< units::is_convertible_v< U2, U1 >, bool >
 Less-equal comparison.
 
template<typename T1 , typename U1 , typename T2 , typename U2 >
constexpr auto operator> (const tagged_quantity< T1, U1 > &a, const tagged_quantity< T2, U2 > &b) -> std::enable_if_t< units::is_convertible_v< U2, U1 >, bool >
 Greater-than comparison.
 
template<typename T1 , typename U1 , typename T2 , typename U2 >
constexpr auto operator>= (const tagged_quantity< T1, U1 > &a, const tagged_quantity< T2, U2 > &b) -> std::enable_if_t< units::is_convertible_v< U2, U1 >, bool >
 Greater-equal comparison.
 
template<typename T , typename U >
constexpr auto operator+ (const tagged_quantity< T, U > &a)
 Unary plus operator.
 
template<typename T , typename U >
constexpr auto operator- (const tagged_quantity< T, U > &a)
 Unary negation operator.
 
template<typename T1 , typename U1 , typename T2 , typename U2 >
constexpr auto operator+ (const tagged_quantity< T1, U1 > &a, const tagged_quantity< T2, U2 > &b)
 Addition operator.
 
template<typename T1 , typename U1 , typename T2 , typename U2 >
constexpr auto operator- (const tagged_quantity< T1, U1 > &a, const tagged_quantity< T2, U2 > &b)
 Subtraction operator.
 
template<typename T1 , typename U1 , typename T2 , typename U2 >
constexpr auto operator* (const tagged_quantity< T1, U1 > &a, const tagged_quantity< T2, U2 > &b)
 Multiplication operator.
 
template<typename T1 , typename U , typename T2 , typename = std::enable_if_t<!units::is_unit_v<T2> && !is_tagged_quantity_v<T2>>>
constexpr auto operator* (const tagged_quantity< T1, U > &a, const T2 &c)
 Multiplication by constant operator.
 
template<typename T1 , typename T2 , typename U >
constexpr auto operator* (const T1 &c, const tagged_quantity< T2, U > &a)
 Multiplication by constant operator.
 
template<typename T1 , typename U1 , typename U2 , typename = std::enable_if_t<units::is_unit_v<U2>>>
constexpr auto operator* (const tagged_quantity< T1, U1 > &a, U2)
 Multiplication by unit operator.
 
template<typename T1 , typename U1 , typename T2 , typename U2 >
constexpr auto operator/ (const tagged_quantity< T1, U1 > &a, const tagged_quantity< T2, U2 > &b)
 Division operator.
 
template<typename T1 , typename U , typename T2 , typename = std::enable_if_t<!units::is_unit_v<T2>>>
constexpr auto operator/ (const tagged_quantity< T1, U > &a, const T2 &c)
 Division by constant operator.
 
template<typename T1 , typename U1 , typename U2 , typename = std::enable_if_t<units::is_unit_v<U2>>>
constexpr auto operator/ (const tagged_quantity< T1, U1 > &a, U2)
 Constant division operator.
 

Detailed Description

template<typename T, typename U>
class eagine::tagged_quantity< T, U >

Value of type T with a specified unit or tag type U.

Examples
eagine/units.cpp.

The documentation for this class was generated from the following files:

Copyright © 2015-2021 Matúš Chochlík.
<chochlik -at -gmail.com>
Documentation generated on Tue Apr 13 2021 by Doxygen (version 1.8.17).