46{
47 std::cout << "=== Adapter Pattern Example ===\n\n";
48
49
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";
57 }
58
59
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
70 std::cout << "\n3. make_shared_adapter helper:\n";
71 {
73 std::cout << " Name: " << adapted->get_name() << "\n";
74 adapted->process();
75 }
76
77
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.
Primary adapter_traits template for value types.