24 #include <type_traits>
29 namespace InstOrRefHolder_Impl {
31 template <
typename InterfaceType,
typename InstanceType>
33 template <
typename... Args>
36 InterfaceType&
ref()
override {
43 template <
typename InterfaceType>
47 InterfaceType&
ref()
override {
57 template <
typename InterfaceType>
58 template <
typename InstanceType,
typename... Args>
61 "InstanceType must be a subtype of InterfaceType");
62 return make_unique<InstOrRefHolder_Impl::InstHolder_Impl<InterfaceType, InstanceType>>(std::forward<Args>(args)...);
65 template <
typename InterfaceType>
67 return make_unique<InstOrRefHolder_Impl::RefHolder_Impl<InterfaceType>>(ref);
virtual ~InstHolder_Impl()=default
InterfaceType & ref() override
virtual ~RefHolder_Impl()=default
InterfaceType & ref() override
std::reference_wrapper< InterfaceType > m_reference
static std::unique_ptr< InstOrRefHolder< InterfaceType > > create(Args...args)
InstHolder_Impl(Args...args)
RefHolder_Impl(InterfaceType &ref)