47 std::cout <<
"=== Adapter Pattern Example ===\n\n";
50 std::cout <<
"1. Shared pointer adapter:\n";
52 auto service = std::make_shared<DataService>(
"SharedService");
53 auto adapted =
adapter(service);
55 std::cout <<
" Name via ->: " << adapted->get_name() <<
"\n";
60 std::cout <<
"\n2. Unique pointer adapter:\n";
62 auto service = std::make_unique<DataService>(
"UniqueService");
63 auto adapted =
adapter(std::move(service));
65 std::cout <<
" Name via ->: " << adapted->get_name() <<
"\n";
66 std::cout <<
" Raw ptr: " << (adapted.get() !=
nullptr ?
"valid" :
"null") <<
"\n";
70 std::cout <<
"\n3. make_shared_adapter helper:\n";
73 std::cout <<
" Name: " << adapted->get_name() <<
"\n";
78 std::cout <<
"\n4. Adapter traits:\n";
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";
93 std::cout <<
"\nDone.\n";