From 172c4d9c7da3ccf58668767877c47812981d8dd3 Mon Sep 17 00:00:00 2001 From: Max Kellermann <mk@cm4all.com> Date: Thu, 2 Dec 2021 23:20:49 +0100 Subject: [PATCH] util/BindMethod: remove unnecessary template arguments from BindMethodWrapperGenerator --- src/util/BindMethod.hxx | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/util/BindMethod.hxx b/src/util/BindMethod.hxx index 5066ece66..2403a3d10 100644 --- a/src/util/BindMethod.hxx +++ b/src/util/BindMethod.hxx @@ -137,28 +137,25 @@ struct MethodWrapperWithSignature<R(Args...) noexcept(NoExcept)> { /** * Generate a wrapper function. * - * @param T the containing class * @param method the method pointer - * @param S the plain function signature type */ -template<typename T, auto method, typename S> +template<typename M, auto method> struct BindMethodWrapperGenerator; template<typename T, bool NoExcept, auto method, typename R, typename... Args> -struct BindMethodWrapperGenerator<T, method, R(Args...) noexcept(NoExcept)> { +struct BindMethodWrapperGenerator<R (T::*)(Args...) noexcept(NoExcept), method> { static R Invoke(void *_instance, Args... args) noexcept(NoExcept) { auto &t = *(T *)_instance; return (t.*method)(std::forward<Args>(args)...); } }; -template<typename T, typename S, - typename MethodWithSignature<T, S>::method_pointer method> -typename MethodWrapperWithSignature<S>::function_pointer +template<auto method> +typename MethodWrapperWithSignature<typename MethodSignatureHelper<decltype(method)>::plain_signature>::function_pointer MakeBindMethodWrapper() noexcept { - return BindMethodWrapperGenerator<T, method, S>::Invoke; + return BindMethodWrapperGenerator<decltype(method), method>::Invoke; } /** @@ -222,11 +219,10 @@ constexpr auto BindMethod(typename BindMethodDetail::MethodSignatureHelper<decltype(method)>::class_type &instance) noexcept { using H = BindMethodDetail::MethodSignatureHelper<decltype(method)>; - using class_type = typename H::class_type; using plain_signature = typename H::plain_signature; return BoundMethod<plain_signature>{ &instance, - BindMethodDetail::MakeBindMethodWrapper<class_type, plain_signature, method>(), + BindMethodDetail::MakeBindMethodWrapper<method>(), }; } -- 2.24.1