Common System 0.2.0
Common interfaces and patterns for system integration
Loading...
Searching...
No Matches
adapter_pattern_example.cpp
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
14
16
17#include <iostream>
18#include <memory>
19#include <string>
20
21using namespace kcenon::common;
22using namespace kcenon::common::adapters;
23
24// A sample service class
26{
27public:
28 explicit DataService(std::string name) : name_(std::move(name)) {}
29
30 std::string get_name() const { return name_; }
31 void process() { std::cout << " " << name_ << " processing data...\n"; }
32
33private:
34 std::string name_;
35};
36
37// Generic function that works with any adapter
38template <typename T>
39void use_service(const adapter<T>& svc)
40{
41 std::cout << " Pointer valid: " << (svc.get() != nullptr ? "true" : "false") << "\n";
42 svc->process();
43}
44
45int main()
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}
Adapter traits and base class for type-erased cross-system wrappers.
void use_service(const adapter< T > &svc)
std::string get_name() const
DataService(std::string name)
Unified adapter template for wrapping values or smart pointers.
Definition adapter.h:118
auto get() const noexcept
Access raw pointer to the stored value.
Definition adapter.h:140
adapter(T) -> adapter< T >
auto make_shared_adapter(Args &&... args)
Factory function to create adapter wrapping shared_ptr.
Definition adapter.h:276
Core interfaces.
Definition adapter.h:21
Primary adapter_traits template for value types.
Definition adapter.h:34