Visitable Adapters - GerdHirsch/Cpp-VisitorFrameworkCyclicAcyclic GitHub Wiki

Types that don't inherit from your Repository::VisitableImpl<..>, like NonVisitable, can be adapted by an Adapter. There are three kinds of Adapters predefined in the Repository for convenience, but you can also specify your own StoragePolicy.

But the most suitable way is to use a Factory.

#include "NonVisitable.h"
#include "MyRepository.h"

// example for userdefined StoragePolicy
template<class Adaptee> 
using MyAdapter = 
    Repository::VisitableAdapter<Adaptee, VisitorFramework::StorageByWeakpointer<Adaptee>>;

// example for convenience Adapters
template<class Adaptee>
using AdapterWeak = Repository::AdapterByWeakpointer<Adaptee>;

template<class Adaptee>
using AdapterReference = Repository::AdapterByReference<Adaptee>;
...
NonVisitable nv;
auto pNV = std::make_shared<NonVisitable>();
...
visitables.push_back(Visitable(new AdapterReference<NonVisitable>(nv)));
visitables.push_back(Visitable(new AdapterWeak<NonVisitable>(pNV)));
...
demoRunVisitor(visitor, visitables);

see also: Application, demoSwitchCyclicAcyclic.cpp and demoRunVisitors

⚠️ **GitHub.com Fallback** ⚠️