18template <
typename BASE,
typename... Interfaces>
33 return ptr ? ptr : BASE::i_cast( tid );
42 if ( !*pp )
return BASE::queryInterface( ti, pp );
50 auto vb = BASE::getInterfaceNames();
53 vb.insert( vb.end(), std::make_move_iterator( vi.begin() ), std::make_move_iterator( vi.end() ) );
58template <
typename BASE,
typename I1>
60template <
typename BASE,
typename I1,
typename I2>
62template <
typename BASE,
typename I1,
typename I2,
typename I3>
64template <
typename BASE,
typename I1,
typename I2,
typename I3,
typename I4>
This class is used for returning status codes from appropriate routines.
constexpr static const auto SUCCESS
constexpr static const auto FAILURE
Base class used to extend a class implementing other interfaces.
void const * i_cast(const InterfaceID &tid) const override
Implementation of IInterface::i_cast.
extend_interfaces< Interfaces... > extend_interfaces_base
StatusCode queryInterface(const InterfaceID &ti, void **pp) override
Implementation of IInterface::queryInterface.
std::vector< std::string > getInterfaceNames() const override
Implementation of IInterface::getInterfaceNames.
extends< BASE, I1, I2, I3 > extends3
extends< BASE, I1, I2 > extends2
extends< BASE, I1, I2, I3, I4 > extends4
extends< BASE, I1 > extends1
void * iid_cast(const InterfaceID &tid, Gaudi::interface_list< Is... >, P *ptr)
std::vector< std::string > getInterfaceNames(Gaudi::interface_list< Is... >)
Base class to be used to extend an interface.
typename Gaudi::interface_list_cat< typename Interfaces::ext_iids... >::type ext_iids