Github   Telegram
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Attributes | List of all members
utils::StrongTypedef< Tag, T, Ops, class > Class Template Reference

Strong typedef for a type T. More...

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

Public Types

using UnderlyingType = T
 
using TagType = Tag
 

Public Member Functions

 StrongTypedef (const StrongTypedef &)=default
 
 StrongTypedef (StrongTypedef &&) noexcept=default
 
StrongTypedefoperator= (const StrongTypedef &)=default
 
StrongTypedefoperator= (StrongTypedef &&) noexcept=default
 
constexpr StrongTypedef (impl::strong_typedef::InitializerList< T > lst)
 
template<typename... Args, typename = std::enable_if_t<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
 
template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<T, Void>>
auto begin ()
 
template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<T, Void>>
auto end ()
 
template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<const T, Void>>
auto begin () const
 
template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<const T, Void>>
auto end () const
 
template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<const T, Void>>
auto cbegin () const
 
template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<const T, Void>>
auto cend () const
 
template<typename Void = void, typename = impl::strong_typedef::EnableIfSizeable<const T, Void>>
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
 

Detailed Description

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

Strong typedef for a type T.

Typical usage:

Or:

struct MyString final : utils::StrongTypedef<MyString, std::string> {
using StrongTypedef::StrongTypedef;
};

Has all the:

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

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

Examples
postgresql/functional_tests/basic_chaos/postgres_service.cpp, and samples/postgres_service/postgres_service.cpp.

Definition at line 162 of file strong_typedef.hpp.

Member Typedef Documentation

◆ TagType

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

Definition at line 171 of file strong_typedef.hpp.

◆ UnderlyingType

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

Definition at line 170 of file strong_typedef.hpp.

Constructor & Destructor Documentation

◆ StrongTypedef() [1/2]

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

Definition at line 180 of file strong_typedef.hpp.

◆ StrongTypedef() [2/2]

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

Definition at line 185 of file strong_typedef.hpp.

Member Function Documentation

◆ begin() [1/2]

template<class Tag , class T , StrongTypedefOps Ops, class >
template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<T, Void>>
auto utils::StrongTypedef< Tag, T, Ops, class >::begin ( )
inline

Definition at line 204 of file strong_typedef.hpp.

◆ begin() [2/2]

template<class Tag , class T , StrongTypedefOps Ops, class >
template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<const T, Void>>
auto utils::StrongTypedef< Tag, T, Ops, class >::begin ( ) const
inline

Definition at line 216 of file strong_typedef.hpp.

◆ cbegin()

template<class Tag , class T , StrongTypedefOps Ops, class >
template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<const T, Void>>
auto utils::StrongTypedef< Tag, T, Ops, class >::cbegin ( ) const
inline

Definition at line 228 of file strong_typedef.hpp.

◆ cend()

template<class Tag , class T , StrongTypedefOps Ops, class >
template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<const T, Void>>
auto utils::StrongTypedef< Tag, T, Ops, class >::cend ( ) const
inline

Definition at line 234 of file strong_typedef.hpp.

◆ clear()

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

Definition at line 246 of file strong_typedef.hpp.

◆ empty()

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

Definition at line 244 of file strong_typedef.hpp.

◆ end() [1/2]

template<class Tag , class T , StrongTypedefOps Ops, class >
template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<T, Void>>
auto utils::StrongTypedef< Tag, T, Ops, class >::end ( )
inline

Definition at line 210 of file strong_typedef.hpp.

◆ end() [2/2]

template<class Tag , class T , StrongTypedefOps Ops, class >
template<typename Void = void, typename = impl::strong_typedef::EnableIfRange<const T, Void>>
auto utils::StrongTypedef< Tag, T, Ops, class >::end ( ) const
inline

Definition at line 222 of file strong_typedef.hpp.

◆ GetUnderlying() [1/3]

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

Definition at line 199 of file strong_typedef.hpp.

◆ GetUnderlying() [2/3]

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

Definition at line 200 of file strong_typedef.hpp.

◆ GetUnderlying() [3/3]

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

Definition at line 198 of file strong_typedef.hpp.

◆ operator const T &()

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

Definition at line 194 of file strong_typedef.hpp.

◆ operator T()

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

Definition at line 195 of file strong_typedef.hpp.

◆ operator T&()

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

Definition at line 196 of file strong_typedef.hpp.

◆ operator[]() [1/2]

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

Definition at line 249 of file strong_typedef.hpp.

◆ operator[]() [2/2]

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

Definition at line 253 of file strong_typedef.hpp.

◆ size()

template<class Tag , class T , StrongTypedefOps Ops, class >
template<typename Void = void, typename = impl::strong_typedef::EnableIfSizeable<const T, Void>>
auto utils::StrongTypedef< Tag, T, Ops, class >::size ( ) const
inline

Definition at line 240 of file strong_typedef.hpp.

Member Data Documentation

◆ kOps

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

Definition at line 172 of file strong_typedef.hpp.


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