template struct utils::StrongType
Overview
Template class implementation of a Named Strong Type. More…
#include <StrongType.h> template <typename ValueType, typename PhantomType> struct StrongType { // construction StrongType(); StrongType(ValueType value); // methods template <typename RT> std::enable_if_t<std::is_arithmetic_v<RT>, RT> As() const; bool operator==(const StrongType& other) const; bool operator!=(const StrongType& other) const; bool operator<(const StrongType& other) const; bool operator>(const StrongType& other) const; const ValueType& operator*() const; protected: // fields ValueType value_; };
Detailed Documentation
Template class implementation of a Named Strong Type.
https://www.fluentcpp.com/2016/12/08/strong-types-for-strong-interfaces/ “A strong type is a type used in place of another type to carry specific meaning through its name. As opposed to strong types would be general-use types, like native types such as ints and double for example. Often, native types do not tell much about the meaning of their instances.” It prevents implicit conversions to and from other types, as well as comparisons to other types.
Parameters:
ValueType |
The type of the underlying value. |
PhantomType |
An unused type specific for each Strong Type to ensure the Strong Type is different from every other type. |
Fields
ValueType value_
The actual underlying value.
Methods
template <typename RT> std::enable_if_t<std::is_arithmetic_v<RT>, RT> As() const
Cast to a specified type. Only work for arithmetic types.
const ValueType& operator*() const
Get underlying value using the * operator.