From 03ee70025a98912c163155955fe3cc3045f629b9 Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Mon, 15 Oct 2018 22:18:24 +0200 Subject: [PATCH] funchelpers: Support traits for non-member functions Add a FuncHelper overload for non-member (free) functions. Rename MemberFunction to FunctionTraits to reflect that enhancement. --- src/common/funchelpers.h | 24 +++++++++++++++--------- src/uisupport/widgethelpers.h | 2 +- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/common/funchelpers.h b/src/common/funchelpers.h index 01ee8222..c56cdb94 100644 --- a/src/common/funchelpers.h +++ b/src/common/funchelpers.h @@ -32,21 +32,27 @@ template struct FuncHelper : public FuncHelper {}; -// Overload for member function with const call operator -template -struct FuncHelper : public FuncHelper -{}; +// Overload for free function +template +struct FuncHelper +{ + using FunctionType = std::function; + using ReturnType = R; + using ArgsTuple = std::tuple; +}; // Overload for member function with non-const call operator template -struct FuncHelper +struct FuncHelper : public FuncHelper { using ClassType = C; - using FunctionType = std::function; - using ReturnType = R; - using ArgsTuple = std::tuple; }; +// Overload for member function with const call operator +template +struct FuncHelper : public FuncHelper +{}; + /// @endcond } // namespace detail @@ -55,4 +61,4 @@ struct FuncHelper * Provides traits for the given callable. */ template -using MemberFunction = detail::FuncHelper; +using FunctionTraits = detail::FuncHelper; diff --git a/src/uisupport/widgethelpers.h b/src/uisupport/widgethelpers.h index 9ca6189a..4efe75ee 100644 --- a/src/uisupport/widgethelpers.h +++ b/src/uisupport/widgethelpers.h @@ -66,7 +66,7 @@ bool tryConnectChangedSignal(const QObject* widget, const Receiver* receiver, Sl // If *alreadyConnected is true, just returns false to prevent multiple connections. static const auto tryConnect = [](const QObject* object, auto sig, auto receiver, auto slot, bool* alreadyConnected) { if (!*alreadyConnected) { - auto widget = qobject_cast::ClassType*>(object); + auto widget = qobject_cast::ClassType*>(object); if (widget) { *alreadyConnected = QObject::connect(widget, sig, receiver, slot); return *alreadyConnected; -- 2.20.1