Common System 0.2.0
Common interfaces and patterns for system integration
Loading...
Searching...
No Matches
kcenon::common::adapters::adapter< T, Traits > Class Template Reference

Unified adapter template for wrapping values or smart pointers. More...

#include <adapter.h>

Collaboration diagram for kcenon::common::adapters::adapter< T, Traits >:
Collaboration graph

Public Types

using value_type = typename Traits::value_type
 
using pointer_type = typename Traits::pointer_type
 
using reference_type = typename Traits::reference_type
 
using const_reference_type = typename Traits::const_reference_type
 

Public Member Functions

 adapter (T value)
 Construct adapter from value.
 
 adapter ()
 Default constructor (for default-constructible types)
 
auto get () const noexcept
 Access raw pointer to the stored value.
 
decltype(auto) operator* () const
 Dereference operator.
 
decltype(auto) operator* ()
 Mutable dereference.
 
auto operator-> () const noexcept
 Arrow operator.
 
auto operator-> () noexcept
 Arrow operator (mutable)
 
auto weak () const
 Get weak reference (only for shared_ptr)
 
 operator bool () const noexcept
 Check if adapter holds a valid value.
 
const T & value () const &noexcept
 Get the underlying storage.
 
T & value () &noexcept
 Get the underlying storage (mutable)
 
value () &&noexcept
 Move out the underlying storage.
 
release () noexcept
 Release ownership and return the underlying value.
 

Static Public Member Functions

static constexpr bool is_smart_pointer () noexcept
 Check if adapter is holding a smart pointer type.
 
static constexpr bool supports_weak () noexcept
 Check if weak references are supported.
 

Private Attributes

value_
 

Detailed Description

template<typename T, typename Traits = adapter_traits<T>>
class kcenon::common::adapters::adapter< T, Traits >

Unified adapter template for wrapping values or smart pointers.

This adapter provides a consistent interface regardless of whether the wrapped type is a value, shared_ptr, or unique_ptr.

Template Parameters
TThe type to wrap (can be value, shared_ptr, or unique_ptr)
TraitsAdapter traits (automatically deduced)
// Value type
auto a1 = adapter<int>(42);
// Shared pointer
auto a2 = adapter(std::make_shared<MyClass>());
// Factory functions
auto a3 = make_adapter<MyClass>(args...);
auto a4 = make_shared_adapter<MyClass>(args...);
adapter()
Default constructor (for default-constructible types)
Definition adapter.h:134
auto make_adapter(Args &&... args)
Factory function to create adapter with in-place construction.
Definition adapter.h:263
auto make_shared_adapter(Args &&... args)
Factory function to create adapter wrapping shared_ptr.
Definition adapter.h:276
Examples
adapter_pattern_example.cpp.

Definition at line 118 of file adapter.h.

Member Typedef Documentation

◆ const_reference_type

template<typename T , typename Traits = adapter_traits<T>>
using kcenon::common::adapters::adapter< T, Traits >::const_reference_type = typename Traits::const_reference_type

Definition at line 123 of file adapter.h.

◆ pointer_type

template<typename T , typename Traits = adapter_traits<T>>
using kcenon::common::adapters::adapter< T, Traits >::pointer_type = typename Traits::pointer_type

Definition at line 121 of file adapter.h.

◆ reference_type

template<typename T , typename Traits = adapter_traits<T>>
using kcenon::common::adapters::adapter< T, Traits >::reference_type = typename Traits::reference_type

Definition at line 122 of file adapter.h.

◆ value_type

template<typename T , typename Traits = adapter_traits<T>>
using kcenon::common::adapters::adapter< T, Traits >::value_type = typename Traits::value_type

Definition at line 120 of file adapter.h.

Constructor & Destructor Documentation

◆ adapter() [1/2]

template<typename T , typename Traits = adapter_traits<T>>
kcenon::common::adapters::adapter< T, Traits >::adapter ( T value)
inlineexplicit

Construct adapter from value.

Parameters
valueThe value to wrap

Definition at line 129 of file adapter.h.

129: value_(std::move(value)) {}
const T & value() const &noexcept
Get the underlying storage.
Definition adapter.h:206

◆ adapter() [2/2]

template<typename T , typename Traits = adapter_traits<T>>
kcenon::common::adapters::adapter< T, Traits >::adapter ( )
inline

Default constructor (for default-constructible types)

Definition at line 134 of file adapter.h.

134: value_() {}

Member Function Documentation

◆ get()

template<typename T , typename Traits = adapter_traits<T>>
auto kcenon::common::adapters::adapter< T, Traits >::get ( ) const
inlinenoexcept

Access raw pointer to the stored value.

Returns
Pointer to the value
Examples
adapter_pattern_example.cpp.

Definition at line 140 of file adapter.h.

140 {
141 if constexpr (Traits::is_smart_pointer) {
142 return value_.get();
143 } else {
144 return std::addressof(value_);
145 }
146 }

References kcenon::common::adapters::adapter< T, Traits >::value_.

Referenced by kcenon::common::adapters::adapter< T, Traits >::operator->(), kcenon::common::adapters::adapter< T, Traits >::operator->(), and use_service().

Here is the caller graph for this function:

◆ is_smart_pointer()

template<typename T , typename Traits = adapter_traits<T>>
static constexpr bool kcenon::common::adapters::adapter< T, Traits >::is_smart_pointer ( )
inlinestaticconstexprnoexcept

Check if adapter is holding a smart pointer type.

Returns
true if smart pointer, false if value type

Definition at line 228 of file adapter.h.

228 {
229 return Traits::is_smart_pointer;
230 }

◆ operator bool()

template<typename T , typename Traits = adapter_traits<T>>
kcenon::common::adapters::adapter< T, Traits >::operator bool ( ) const
inlineexplicitnoexcept

Check if adapter holds a valid value.

Returns
true if valid, false otherwise

Definition at line 194 of file adapter.h.

194 {
195 if constexpr (Traits::is_smart_pointer) {
196 return static_cast<bool>(value_);
197 } else {
198 return true; // Value types are always valid
199 }
200 }

References kcenon::common::adapters::adapter< T, Traits >::value_.

◆ operator*() [1/2]

template<typename T , typename Traits = adapter_traits<T>>
decltype(auto) kcenon::common::adapters::adapter< T, Traits >::operator* ( )
inline

Mutable dereference.

Definition at line 163 of file adapter.h.

163 {
164 if constexpr (Traits::is_smart_pointer) {
165 return *value_;
166 } else {
167 return value_;
168 }
169 }

References kcenon::common::adapters::adapter< T, Traits >::value_.

◆ operator*() [2/2]

template<typename T , typename Traits = adapter_traits<T>>
decltype(auto) kcenon::common::adapters::adapter< T, Traits >::operator* ( ) const
inline

Dereference operator.

Returns
Reference to the stored value

Definition at line 152 of file adapter.h.

152 {
153 if constexpr (Traits::is_smart_pointer) {
154 return *value_;
155 } else {
156 return value_;
157 }
158 }

References kcenon::common::adapters::adapter< T, Traits >::value_.

◆ operator->() [1/2]

template<typename T , typename Traits = adapter_traits<T>>
auto kcenon::common::adapters::adapter< T, Traits >::operator-> ( ) const
inlinenoexcept

Arrow operator.

Returns
Pointer to the value for member access

Definition at line 175 of file adapter.h.

175{ return get(); }
auto get() const noexcept
Access raw pointer to the stored value.
Definition adapter.h:140

References kcenon::common::adapters::adapter< T, Traits >::get().

Here is the call graph for this function:

◆ operator->() [2/2]

template<typename T , typename Traits = adapter_traits<T>>
auto kcenon::common::adapters::adapter< T, Traits >::operator-> ( )
inlinenoexcept

Arrow operator (mutable)

Definition at line 180 of file adapter.h.

180{ return get(); }

References kcenon::common::adapters::adapter< T, Traits >::get().

Here is the call graph for this function:

◆ release()

template<typename T , typename Traits = adapter_traits<T>>
T kcenon::common::adapters::adapter< T, Traits >::release ( )
inlinenoexcept

Release ownership and return the underlying value.

Returns
The stored value (moved)

Definition at line 222 of file adapter.h.

222{ return std::move(value_); }

References kcenon::common::adapters::adapter< T, Traits >::value_.

◆ supports_weak()

template<typename T , typename Traits = adapter_traits<T>>
static constexpr bool kcenon::common::adapters::adapter< T, Traits >::supports_weak ( )
inlinestaticconstexprnoexcept

Check if weak references are supported.

Returns
true if supports weak references

Definition at line 236 of file adapter.h.

236 {
237 return Traits::supports_weak;
238 }

◆ value() [1/3]

template<typename T , typename Traits = adapter_traits<T>>
T kcenon::common::adapters::adapter< T, Traits >::value ( ) &&
inlinenoexcept

Move out the underlying storage.

Definition at line 216 of file adapter.h.

216{ return std::move(value_); }

References kcenon::common::adapters::adapter< T, Traits >::value_.

◆ value() [2/3]

template<typename T , typename Traits = adapter_traits<T>>
T & kcenon::common::adapters::adapter< T, Traits >::value ( ) &
inlinenoexcept

Get the underlying storage (mutable)

Definition at line 211 of file adapter.h.

211{ return value_; }

References kcenon::common::adapters::adapter< T, Traits >::value_.

◆ value() [3/3]

template<typename T , typename Traits = adapter_traits<T>>
const T & kcenon::common::adapters::adapter< T, Traits >::value ( ) const &
inlinenoexcept

Get the underlying storage.

Returns
Reference to the stored value

Definition at line 206 of file adapter.h.

206{ return value_; }

References kcenon::common::adapters::adapter< T, Traits >::value_.

◆ weak()

template<typename T , typename Traits = adapter_traits<T>>
auto kcenon::common::adapters::adapter< T, Traits >::weak ( ) const
inline

Get weak reference (only for shared_ptr)

Returns
weak_ptr to the stored value

Definition at line 186 of file adapter.h.

186 {
187 return typename Traits::weak_type(value_);
188 }

References kcenon::common::adapters::adapter< T, Traits >::value_.

Member Data Documentation

◆ value_


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