73 bool Connect (
const QString& name, F&& handler)
75 auto& handlers = Handlers_ [name];
76 if (handlers.isEmpty ())
78 const auto connected = Endpoint_.Conn.connect (Endpoint_.Service,
83 SLOT (invokeHandlers (QDBusMessage)));
88 auto unwrapper = [
this, name, handler = std::forward<F> (handler)] (
const QDBusMessage& msg)
90 [&,
this]<
size_t... Ixs> (std::index_sequence<Ixs...>)
92 QDBusPendingReply<std::decay_t<ArgType_t<F, Ixs>>...> payload { msg };
93 if (payload.isError ())
95 qWarning () << Endpoint_.Service << Endpoint_.Path << Endpoint_.Interface << name
96 <<
"mismatching arguments:" << payload.error ();
99 handler (payload.template argumentAt<Ixs> ()...);
100 } (std::make_index_sequence<ArgCount_v<F>> {});
102 handlers << std::move (unwrapper);