diff options
author | Alexey Rusakov <Kitsune-Ral@users.sf.net> | 2021-10-04 11:05:10 +0200 |
---|---|---|
committer | Alexey Rusakov <Kitsune-Ral@users.sf.net> | 2021-10-04 11:05:10 +0200 |
commit | c16813c5209f0421ec773a98cf935a2eb2ea3d7c (patch) | |
tree | 29af3cff94a76fafea19d93f0e47c1c37b2ae24f /lib/qt_connection_util.h | |
parent | 73c1c8747b0c00524239724bb7cf00776448c5c7 (diff) | |
download | libquotient-c16813c5209f0421ec773a98cf935a2eb2ea3d7c.tar.gz libquotient-c16813c5209f0421ec773a98cf935a2eb2ea3d7c.zip |
Move away wrap_in_function to private interface
This has always been merely a workaround to enable
connectUntil/connectSingleShot and was never intended to be used
elsewhere, let alone in clients.
Diffstat (limited to 'lib/qt_connection_util.h')
-rw-r--r-- | lib/qt_connection_util.h | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/lib/qt_connection_util.h b/lib/qt_connection_util.h index c6fa037a..9370d2eb 100644 --- a/lib/qt_connection_util.h +++ b/lib/qt_connection_util.h @@ -73,6 +73,17 @@ namespace _impl { }), connType); } + + // TODO: get rid of it as soon as Apple Clang gets proper deduction guides + // for std::function<> + // ...or consider using QtPrivate magic used by QObject::connect() + // ...for inspiration, also check a possible std::not_fn implementation + // at https://en.cppreference.com/w/cpp/utility/functional/not_fn + template <typename FnT> + inline auto wrap_in_function(FnT&& f) + { + return typename function_traits<FnT>::function_type(std::forward<FnT>(f)); + } } // namespace _impl /*! \brief Create a connection that self-disconnects when its "slot" returns true @@ -90,7 +101,7 @@ inline auto connectUntil(SenderT* sender, SignalT signal, ContextT* context, const FunctorT& slot, Qt::ConnectionType connType = Qt::AutoConnection) { - return _impl::connectUntil(sender, signal, context, wrap_in_function(slot), + return _impl::connectUntil(sender, signal, context, _impl::wrap_in_function(slot), connType); } @@ -101,7 +112,7 @@ inline auto connectSingleShot(SenderT* sender, SignalT signal, Qt::ConnectionType connType = Qt::AutoConnection) { return _impl::connectSingleShot( - sender, signal, context, wrap_in_function(slot), connType); + sender, signal, context, _impl::wrap_in_function(slot), connType); } // Specialisation for usual Qt slots passed as pointers-to-members. @@ -114,7 +125,7 @@ inline auto connectSingleShot(SenderT* sender, SignalT signal, { // TODO: when switching to C++20, use std::bind_front() instead return _impl::connectSingleShot(sender, signal, receiver, - wrap_in_function( + _impl::wrap_in_function( [receiver, slot](const ArgTs&... args) { (receiver->*slot)(args...); }), |