From 1918c689d78b0f6a718343e7ebceb387acc32a97 Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Mon, 12 Oct 2020 20:04:09 +0200 Subject: QObject: simplify part of connection logic We do not require anymore that the metatypes are declared beforehand, but can instead simply use QMetaType::fromType().id(). This allows us to remove the templates containing the "metatype is declared" validation logic. Change-Id: I0b74c72643a233335689074091a38648f3e4f853 Reviewed-by: Qt CI Bot Reviewed-by: Lars Knoll --- src/corelib/kernel/qobject_impl.h | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/src/corelib/kernel/qobject_impl.h b/src/corelib/kernel/qobject_impl.h index 0c36417a24..722ebec847 100644 --- a/src/corelib/kernel/qobject_impl.h +++ b/src/corelib/kernel/qobject_impl.h @@ -56,23 +56,10 @@ namespace QtPrivate { Logic to statically generate the array of qMetaTypeId ConnectionTypes::Arguments>::types() returns an array of int that is suitable for the types arguments of the connection functions. - - The array only exist of all the types are declared as a metatype - (detected using the TypesAreDeclaredMetaType helper struct) - If one of the type is not declared, the function return 0 and the signal - cannot be used in queued connection. */ - template struct TypesAreDeclaredMetaType { enum { Value = false }; }; - template <> struct TypesAreDeclaredMetaType> { enum { Value = true }; }; - template struct TypesAreDeclaredMetaType > - { enum { Value = QMetaTypeId2::Defined && TypesAreDeclaredMetaType>::Value }; }; - - template ::Value > struct ConnectionTypes - { static const int *types() { return nullptr; } }; - template <> struct ConnectionTypes, true> - { static const int *types() { return nullptr; } }; - template struct ConnectionTypes, true> - { static const int *types() { static const int t[sizeof...(Args) + 1] = { (QtPrivate::QMetaTypeIdHelper::qt_metatype_id())..., 0 }; return t; } }; + template struct ConnectionTypes; + template struct ConnectionTypes> + { static const int *types() { static const int t[sizeof...(Args) + 1] = { QMetaType::fromType().id()..., 0 }; return t; } }; // implementation of QSlotObjectBase for which the slot is a static function // Args and R are the List of arguments and the return type of the signal to which the slot is connected. -- cgit v1.2.3