17#define GAUDI_FUNCTIONAL_TOOL_BINDER_USES_CREATE
21 template <
typename Signature,
typename Traits>
24 template <
typename IFace,
typename... Args,
typename Traits>
26 :
public extends<details::BaseClass_t<Traits, AlgTool>, Gaudi::Interface::Bind::IBinder<IFace>> {
28 constexpr static std::size_t
N =
sizeof...( Args );
30 template <
typename IArgs, std::size_t... I>
33 std::index_sequence<I...> )
35 std::move( name ), parent }
36 , m_handles{ std::tuple_cat( std::forward_as_tuple(
this ), std::get<I>( args ) )... }
37 , m_creator{ creator } {}
39 std::tuple<details::InputHandle_t<Traits, Args>...>
m_handles;
43 using KeyValue = std::pair<std::string, std::string>;
47 :
ToolBinder{
std::move( type ),
std::move( name ), parent, inputs, creator,
std::make_index_sequence<
N>{} } {
52 [&](
auto const&... arg ) {
54 return std::invoke(
m_creator,
this,
get( arg, *
this, ctx )... );
59 template <std::
size_t N = 0>
71 template <
typename BoundInstance,
typename Self>
73 static_assert( std::is_base_of_v<ToolBinder, Self> );
74 return +[](
void const* ptr,
const Args&... args ) {
76 static_cast<std::add_const_t<Self>*
>( ptr ), args... };
82 template <
typename Signature,
typename Traits_ = Traits::use_<Traits::BaseClass_t<AlgTool>>>
This class represents an entry point to all the event specific data.
Definition of the basic interface.
Base class used to extend a class implementing other interfaces.
auto get(const Handle &handle, const Algo &, const EventContext &) -> decltype(details::deref(handle.get()))
auto getKey(const Handle &h) -> decltype(h.objKey())
typename detail2::InputHandle< T, Tr, detail2::DefaultInputHandle >::type InputHandle_t
detail2::BaseClass< Tr, Default >::type BaseClass_t
decltype(get_values_helper< Value >(std::make_index_sequence< N >())) RepeatValues_
details::ToolBinder< Signature, Traits_ > ToolBinder
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...