25 #include <type_traits>
29 namespace InstOrRefHolder_Impl {
31 template <
typename InterfaceType,
typename InstanceType>
33 template <
typename... Args>
36 InterfaceType&
ref()
override {
44 template <
typename InterfaceType>
48 InterfaceType&
ref()
override {
58 template <
typename InterfaceType>
59 template <
typename InstanceType,
typename... Args>
62 "InstanceType must be a subtype of InterfaceType");
63 return Euclid::make_unique<InstOrRefHolder_Impl::InstHolder_Impl<InterfaceType, InstanceType>>(
64 std::forward<Args>(args)...);
67 template <
typename InterfaceType>
69 return Euclid::make_unique<InstOrRefHolder_Impl::RefHolder_Impl<InterfaceType>>(ref);
virtual ~InstHolder_Impl()=default
InterfaceType & ref() override
virtual ~RefHolder_Impl()=default
InterfaceType & ref() override
RefHolder_Impl(InterfaceType &ref_)
std::reference_wrapper< InterfaceType > m_reference
static std::unique_ptr< InstOrRefHolder< InterfaceType > > create(Args...args)
InstHolder_Impl(Args...args)