userver: utils::StrongTypedef< Tag, T, Ops > Class Template Reference
Loading...
Searching...
No Matches
utils::StrongTypedef< Tag, T, Ops > Class Template Reference

#include <userver/utils/strong_typedef.hpp>

Detailed Description

template<class Tag, class T, StrongTypedefOps Ops>
class utils::StrongTypedef< Tag, T, Ops >

Strong typedef for a type T.

Typical usage:

struct MyString2 final : utils::StrongTypedef<MyString2, std::string, utils::StrongTypedefOps::kCompareTransparent> {
using StrongTypedef::StrongTypedef;
};

Has all the:

  • comparison (see "Operators" below)
  • hashing
  • streaming operators
  • optimizaed logging for LOG_XXX()

If used with container-like type also has common STL functions:

  • begin()
  • end()
  • cbegin()
  • cend()
  • size()
  • empty()
  • clear()
  • operator[]

Operators: You can customize the operators that are available by passing the third argument of type StrongTypedefOps. See its docs for more info.

Definition at line 156 of file strong_typedef.hpp.

Inheritance diagram for utils::StrongTypedef< Tag, T, Ops >:

Public Types

using UnderlyingType = T
using TagType = Tag

Public Member Functions

 StrongTypedef (const StrongTypedef &)=default
 StrongTypedef (StrongTypedef &&) noexcept=default
StrongTypedef & operator= (const StrongTypedef &)=default
StrongTypedef & operator= (StrongTypedef &&) noexcept=default
constexpr StrongTypedef (impl::strong_typedef::InitializerList< T > lst)
template<typename... Args>
requires std::is_constructible_v<T, Args...>
constexpr StrongTypedef (Args &&... args) noexcept(noexcept(T(std::forward< Args >(args)...)))
constexpr operator const T & () const &noexcept
constexpr operator T () &&noexcept
constexpr operator T& () &noexcept
constexpr const T & GetUnderlying () const &noexcept
constexpr T GetUnderlying () &&noexcept
constexpr T & GetUnderlying () &noexcept
auto begin ()
auto end ()
auto begin () const
auto end () const
auto cbegin () const
auto cend () const
auto size () const
auto empty () const
auto clear ()
template<class Arg>
decltype(auto) operator[] (Arg &&i)
template<class Arg>
decltype(auto) operator[] (Arg &&i) const

Static Public Attributes

static constexpr StrongTypedefOps kOps = Ops

Member Typedef Documentation

◆ TagType

template<class Tag, class T, StrongTypedefOps Ops>
using utils::StrongTypedef< Tag, T, Ops >::TagType = Tag

Definition at line 165 of file strong_typedef.hpp.

◆ UnderlyingType

template<class Tag, class T, StrongTypedefOps Ops>
using utils::StrongTypedef< Tag, T, Ops >::UnderlyingType = T

Definition at line 164 of file strong_typedef.hpp.

Constructor & Destructor Documentation

◆ StrongTypedef() [1/2]

template<class Tag, class T, StrongTypedefOps Ops>
utils::StrongTypedef< Tag, T, Ops >::StrongTypedef ( impl::strong_typedef::InitializerList< T > lst)
inlineconstexpr

Definition at line 174 of file strong_typedef.hpp.

◆ StrongTypedef() [2/2]

template<class Tag, class T, StrongTypedefOps Ops>
template<typename... Args>
requires std::is_constructible_v<T, Args...>
utils::StrongTypedef< Tag, T, Ops >::StrongTypedef ( Args &&... args)
inlineexplicitconstexprnoexcept

Definition at line 180 of file strong_typedef.hpp.

Member Function Documentation

◆ begin() [1/2]

template<class Tag, class T, StrongTypedefOps Ops>
auto utils::StrongTypedef< Tag, T, Ops >::begin ( )
inline

Definition at line 199 of file strong_typedef.hpp.

◆ begin() [2/2]

template<class Tag, class T, StrongTypedefOps Ops>
auto utils::StrongTypedef< Tag, T, Ops >::begin ( ) const
inline

Definition at line 211 of file strong_typedef.hpp.

◆ cbegin()

template<class Tag, class T, StrongTypedefOps Ops>
auto utils::StrongTypedef< Tag, T, Ops >::cbegin ( ) const
inline

Definition at line 223 of file strong_typedef.hpp.

◆ cend()

template<class Tag, class T, StrongTypedefOps Ops>
auto utils::StrongTypedef< Tag, T, Ops >::cend ( ) const
inline

Definition at line 229 of file strong_typedef.hpp.

◆ clear()

template<class Tag, class T, StrongTypedefOps Ops>
auto utils::StrongTypedef< Tag, T, Ops >::clear ( )
inline

Definition at line 243 of file strong_typedef.hpp.

◆ empty()

template<class Tag, class T, StrongTypedefOps Ops>
auto utils::StrongTypedef< Tag, T, Ops >::empty ( ) const
inline

Definition at line 241 of file strong_typedef.hpp.

◆ end() [1/2]

template<class Tag, class T, StrongTypedefOps Ops>
auto utils::StrongTypedef< Tag, T, Ops >::end ( )
inline

Definition at line 205 of file strong_typedef.hpp.

◆ end() [2/2]

template<class Tag, class T, StrongTypedefOps Ops>
auto utils::StrongTypedef< Tag, T, Ops >::end ( ) const
inline

Definition at line 217 of file strong_typedef.hpp.

◆ GetUnderlying() [1/3]

template<class Tag, class T, StrongTypedefOps Ops>
T utils::StrongTypedef< Tag, T, Ops >::GetUnderlying ( ) &&
inlineconstexprnoexcept

Definition at line 196 of file strong_typedef.hpp.

◆ GetUnderlying() [2/3]

template<class Tag, class T, StrongTypedefOps Ops>
T & utils::StrongTypedef< Tag, T, Ops >::GetUnderlying ( ) &
inlineconstexprnoexcept

Definition at line 197 of file strong_typedef.hpp.

◆ GetUnderlying() [3/3]

template<class Tag, class T, StrongTypedefOps Ops>
const T & utils::StrongTypedef< Tag, T, Ops >::GetUnderlying ( ) const &
inlineconstexprnoexcept

Definition at line 195 of file strong_typedef.hpp.

◆ operator const T &()

template<class Tag, class T, StrongTypedefOps Ops>
utils::StrongTypedef< Tag, T, Ops >::operator const T & ( ) const &
inlineexplicitconstexprnoexcept

Definition at line 191 of file strong_typedef.hpp.

◆ operator T()

template<class Tag, class T, StrongTypedefOps Ops>
utils::StrongTypedef< Tag, T, Ops >::operator T ( ) &&
inlineexplicitconstexprnoexcept

Definition at line 192 of file strong_typedef.hpp.

◆ operator T&()

template<class Tag, class T, StrongTypedefOps Ops>
utils::StrongTypedef< Tag, T, Ops >::operator T& ( ) &
inlineexplicitconstexprnoexcept

Definition at line 193 of file strong_typedef.hpp.

◆ operator[]() [1/2]

template<class Tag, class T, StrongTypedefOps Ops>
template<class Arg>
decltype(auto) utils::StrongTypedef< Tag, T, Ops >::operator[] ( Arg && i)
inline

Definition at line 246 of file strong_typedef.hpp.

◆ operator[]() [2/2]

template<class Tag, class T, StrongTypedefOps Ops>
template<class Arg>
decltype(auto) utils::StrongTypedef< Tag, T, Ops >::operator[] ( Arg && i) const
inline

Definition at line 250 of file strong_typedef.hpp.

◆ size()

template<class Tag, class T, StrongTypedefOps Ops>
auto utils::StrongTypedef< Tag, T, Ops >::size ( ) const
inline

Definition at line 235 of file strong_typedef.hpp.

Member Data Documentation

◆ kOps

template<class Tag, class T, StrongTypedefOps Ops>
StrongTypedefOps utils::StrongTypedef< Tag, T, Ops >::kOps = Ops
staticconstexpr

Definition at line 166 of file strong_typedef.hpp.


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