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 ) )... }
39 std::tuple<details::InputHandle_t<Traits, Args>...>
m_handles;
43 using KeyValue = std::pair<std::string, std::string>;
52 [&](
auto const&... arg ) {
54 return std::invoke( m_creator,
this,
get( arg, *
this,
ctx )... );
59 template <std::
size_t N = 0>
60 decltype(
auto ) inputLocation()
const {
62 return getKey( std::get<N>( m_handles ) );
65 decltype(
auto ) inputLocation()
const {
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>>>