diff options
author | Arno Rehn <a.rehn@menlosystems.com> | 2021-07-09 16:22:18 +0200 |
---|---|---|
committer | Arno Rehn <a.rehn@menlosystems.com> | 2021-07-15 17:06:54 +0200 |
commit | 90d9a86c2e762c9426d0facbd54ed5dbff574ecd (patch) | |
tree | 03481f31a0bdc3c7593af8fb3ca71e167c3bf345 /src/corelib/thread/qfuture.h | |
parent | ac40875ba701d2f5d405bbd652fbe699f074236c (diff) |
QMetaType: Support converting any QFuture<T> to QFuture<void>
QMetaType now implicitly knows how to convert any QFuture<T> to
QFuture<void> without needing to manually register a converter
function.
QtWebChannel will make use of this to transparently support QFuture<T>
return types.
[ChangeLog][QtCore][QMetaType] QMetaType now supports converting any
QFuture<T> to QFuture<void>.
Task-number: QTBUG-92903
Change-Id: Ied7e71be37c346cc3d2c274ffb0d91a6821ab4d4
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/corelib/thread/qfuture.h')
-rw-r--r-- | src/corelib/thread/qfuture.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/corelib/thread/qfuture.h b/src/corelib/thread/qfuture.h index ab08f7861c..094b3471b8 100644 --- a/src/corelib/thread/qfuture.h +++ b/src/corelib/thread/qfuture.h @@ -43,6 +43,7 @@ #include <QtCore/qglobal.h> #include <QtCore/qfutureinterface.h> +#include <QtCore/qmetatype.h> #include <QtCore/qstring.h> #include <QtCore/qfuture_impl.h> @@ -438,8 +439,27 @@ QFutureInterfaceBase QFutureInterfaceBase::get(const QFuture<T> &future) return future.d; } +namespace QtPrivate +{ + +template<typename T> +struct MetaTypeQFutureHelper<QFuture<T>> +{ + static bool registerConverter() { + if constexpr (std::is_same_v<T, void>) + return false; + + return QMetaType::registerConverter<QFuture<T>, QFuture<void>>( + [](const QFuture<T> &future) { return QFuture<void>(future); }); + } +}; + +} // namespace QtPrivate + Q_DECLARE_SEQUENTIAL_ITERATOR(Future) QT_END_NAMESPACE +Q_DECLARE_METATYPE_TEMPLATE_1ARG(QFuture) + #endif // QFUTURE_H |