Demonstrates the adapter pattern for uniform pointer-like access.
Demonstrates the adapter pattern for uniform pointer-like access.Shows wrapping raw values, shared_ptr, and unique_ptr with adapters that provide a unified access interface regardless of ownership model.
#include <iostream>
#include <memory>
#include <string>
{
public:
void process() { std::cout <<
" " <<
name_ <<
" processing data...\n"; }
private:
};
template <typename T>
{
std::cout <<
" Pointer valid: " << (svc.
get() !=
nullptr ?
"true" :
"false") <<
"\n";
svc->process();
}
{
std::cout << "=== Adapter Pattern Example ===\n\n";
std::cout << "1. Shared pointer adapter:\n";
{
auto service = std::make_shared<DataService>("SharedService");
std::cout << " Name via ->: " << adapted->get_name() << "\n";
}
std::cout << "\n2. Unique pointer adapter:\n";
{
auto service = std::make_unique<DataService>("UniqueService");
auto adapted =
adapter(std::move(service));
std::cout << " Name via ->: " << adapted->get_name() << "\n";
std::cout << " Raw ptr: " << (adapted.get() != nullptr ? "valid" : "null") << "\n";
}
std::cout << "\n3. make_shared_adapter helper:\n";
{
auto adapted = make_shared_adapter<DataService>("FactoryService");
std::cout << " Name: " << adapted->get_name() << "\n";
adapted->process();
}
std::cout << "\n4. Adapter traits:\n";
{
std::cout << " shared_ptr is_smart_pointer: "
<< (shared_traits::is_smart_pointer ? "true" : "false") << "\n";
std::cout << " shared_ptr supports_weak: "
<< (shared_traits::supports_weak ? "true" : "false") << "\n";
std::cout << " unique_ptr is_smart_pointer: "
<< (unique_traits::is_smart_pointer ? "true" : "false") << "\n";
std::cout << " unique_ptr supports_weak: "
<< (unique_traits::supports_weak ? "true" : "false") << "\n";
}
std::cout << "\nDone.\n";
return 0;
}
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.
auto get() const noexcept
Access raw pointer to the stored value.
Primary adapter_traits template for value types.