Common System 0.2.0
Common interfaces and patterns for system integration
Loading...
Searching...
No Matches
adapter_pattern_example.cpp File Reference
#include <kcenon/common/adapters/adapter.h>
#include <iostream>
#include <memory>
#include <string>
Include dependency graph for adapter_pattern_example.cpp:

Go to the source code of this file.

Classes

class  DataService
 

Functions

template<typename T >
void use_service (const adapter< T > &svc)
 
int main ()
 

Function Documentation

◆ main()

int main ( )

Definition at line 45 of file adapter_pattern_example.cpp.

46{
47 std::cout << "=== Adapter Pattern Example ===\n\n";
48
49 // 1. Wrap a shared_ptr
50 std::cout << "1. Shared pointer adapter:\n";
51 {
52 auto service = std::make_shared<DataService>("SharedService");
53 auto adapted = adapter(service);
54
55 std::cout << " Name via ->: " << adapted->get_name() << "\n";
56 use_service(adapted);
57 }
58
59 // 2. Wrap a unique_ptr
60 std::cout << "\n2. Unique pointer adapter:\n";
61 {
62 auto service = std::make_unique<DataService>("UniqueService");
63 auto adapted = adapter(std::move(service));
64
65 std::cout << " Name via ->: " << adapted->get_name() << "\n";
66 std::cout << " Raw ptr: " << (adapted.get() != nullptr ? "valid" : "null") << "\n";
67 }
68
69 // 3. Use make_shared_adapter helper
70 std::cout << "\n3. make_shared_adapter helper:\n";
71 {
72 auto adapted = make_shared_adapter<DataService>("FactoryService");
73 std::cout << " Name: " << adapted->get_name() << "\n";
74 adapted->process();
75 }
76
77 // 4. Adapter traits inspection
78 std::cout << "\n4. Adapter traits:\n";
79 {
82
83 std::cout << " shared_ptr is_smart_pointer: "
84 << (shared_traits::is_smart_pointer ? "true" : "false") << "\n";
85 std::cout << " shared_ptr supports_weak: "
86 << (shared_traits::supports_weak ? "true" : "false") << "\n";
87 std::cout << " unique_ptr is_smart_pointer: "
88 << (unique_traits::is_smart_pointer ? "true" : "false") << "\n";
89 std::cout << " unique_ptr supports_weak: "
90 << (unique_traits::supports_weak ? "true" : "false") << "\n";
91 }
92
93 std::cout << "\nDone.\n";
94 return 0;
95}
void use_service(const adapter< T > &svc)
adapter(T) -> adapter< T >
auto make_shared_adapter(Args &&... args)
Factory function to create adapter wrapping shared_ptr.
Definition adapter.h:276
Primary adapter_traits template for value types.
Definition adapter.h:34

References kcenon::common::adapters::adapter(), kcenon::common::adapters::make_shared_adapter(), and use_service().

Here is the call graph for this function:

◆ use_service()

template<typename T >
void use_service ( const adapter< T > & svc)
Examples
adapter_pattern_example.cpp.

Definition at line 39 of file adapter_pattern_example.cpp.

40{
41 std::cout << " Pointer valid: " << (svc.get() != nullptr ? "true" : "false") << "\n";
42 svc->process();
43}
auto get() const noexcept
Access raw pointer to the stored value.
Definition adapter.h:140

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

Referenced by main().

Here is the call graph for this function:
Here is the caller graph for this function: