OpenTTD Source 20241222-master-gc72542431a
StrongType::Typedef< TBaseType, TTag, TProperties > Struct Template Reference

Templated helper to make a type-safe 'typedef' representing a single POD value. More...

#include <strong_typedef_type.hpp>

Inheritance diagram for StrongType::Typedef< TBaseType, TTag, TProperties >:
StrongTypedefBase

Public Types

using BaseType = TBaseType
 

Public Member Functions

constexpr Typedef (const Typedef &)=default
 
constexpr Typedef (Typedef &&)=default
 
constexpr Typedef (const TBaseType &value)
 
constexpr Typedefoperator= (const Typedef &rhs)
 
constexpr Typedefoperator= (Typedef &&rhs)
 
constexpr Typedefoperator= (const TBaseType &rhs)
 
constexpr TBaseType base () const
 

Data Fields

TBaseType value {}
 

Friends

struct Compare
 
struct Integer
 
template<typename TCompatibleType >
struct Compatible
 

Detailed Description

template<typename TBaseType, typename TTag, typename... TProperties>
struct StrongType::Typedef< TBaseType, TTag, TProperties >

Templated helper to make a type-safe 'typedef' representing a single POD value.

A normal 'typedef' is not distinct from its base type and will be treated as identical in many contexts. This class provides a distinct type that can still be assign from and compared to values of its base type.

Example usage:

using MyType = StrongType::Typedef<int, struct MyTypeTag, StrongType::Explicit, StrongType::Compare, StrongType::Integer>;

Template Parameters
TBaseTypeType of the derived class (i.e. the concrete usage of this class).
TTagAn unique struct to keep types of the same TBaseType distinct.
TPropertiesA list of mixins to add to the class.

Definition at line 150 of file strong_typedef_type.hpp.

Member Typedef Documentation

◆ BaseType

template<typename TBaseType , typename TTag , typename... TProperties>
using StrongType::Typedef< TBaseType, TTag, TProperties >::BaseType = TBaseType

Definition at line 151 of file strong_typedef_type.hpp.

Constructor & Destructor Documentation

◆ Typedef()

template<typename TBaseType , typename TTag , typename... TProperties>
constexpr StrongType::Typedef< TBaseType, TTag, TProperties >::Typedef ( const TBaseType &  value)
inlineconstexpr

Definition at line 157 of file strong_typedef_type.hpp.

Member Function Documentation

◆ base()

template<typename TBaseType , typename TTag , typename... TProperties>
constexpr TBaseType StrongType::Typedef< TBaseType, TTag, TProperties >::base ( ) const
inlineconstexpr

Definition at line 164 of file strong_typedef_type.hpp.

◆ operator=() [1/3]

template<typename TBaseType , typename TTag , typename... TProperties>
constexpr Typedef & StrongType::Typedef< TBaseType, TTag, TProperties >::operator= ( const TBaseType &  rhs)
inlineconstexpr

Definition at line 161 of file strong_typedef_type.hpp.

◆ operator=() [2/3]

template<typename TBaseType , typename TTag , typename... TProperties>
constexpr Typedef & StrongType::Typedef< TBaseType, TTag, TProperties >::operator= ( const Typedef< TBaseType, TTag, TProperties > &  rhs)
inlineconstexpr

Definition at line 159 of file strong_typedef_type.hpp.

◆ operator=() [3/3]

template<typename TBaseType , typename TTag , typename... TProperties>
constexpr Typedef & StrongType::Typedef< TBaseType, TTag, TProperties >::operator= ( Typedef< TBaseType, TTag, TProperties > &&  rhs)
inlineconstexpr

Definition at line 160 of file strong_typedef_type.hpp.

Friends And Related Symbol Documentation

◆ Compare

template<typename TBaseType , typename TTag , typename... TProperties>
friend struct Compare
friend

Definition at line 167 of file strong_typedef_type.hpp.

◆ Compatible

template<typename TBaseType , typename TTag , typename... TProperties>
template<typename TCompatibleType >
friend struct Compatible
friend

Definition at line 169 of file strong_typedef_type.hpp.

◆ Integer

template<typename TBaseType , typename TTag , typename... TProperties>
friend struct Integer
friend

Definition at line 168 of file strong_typedef_type.hpp.

Field Documentation

◆ value

template<typename TBaseType , typename TTag , typename... TProperties>
TBaseType StrongType::Typedef< TBaseType, TTag, TProperties >::value {}

Definition at line 178 of file strong_typedef_type.hpp.


The documentation for this struct was generated from the following file: