From 13c1e3f43441837b1f3b07088358eb658e0e3c3a Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Tue, 14 Jul 2020 15:19:30 +0200 Subject: Cleanup qvariant_cast<> Move the last functionality it had (casting between QObject derived types) over to QMetaType. Now qvariant_cast<> is nothing but a wrapper around QMetaType::convert(). Change-Id: Iab02b6b97c141d64052823646e18227d1eb403dd Reviewed-by: Volker Hilsheimer Reviewed-by: Thiago Macieira --- src/corelib/kernel/qvariant.h | 71 +++++-------------------------------------- 1 file changed, 7 insertions(+), 64 deletions(-) (limited to 'src/corelib/kernel/qvariant.h') diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h index 218b88cb4a..891243ffb1 100644 --- a/src/corelib/kernel/qvariant.h +++ b/src/corelib/kernel/qvariant.h @@ -94,39 +94,6 @@ class QVariantComparisonHelper; template inline T qvariant_cast(const QVariant &); -namespace QtPrivate { - - template - struct ObjectInvoker - { - static ReturnType invoke(Argument a) - { - return Derived::object(a); - } - }; - - template - struct MetaTypeInvoker - { - static ReturnType invoke(Argument a) - { - return Derived::metaType(a); - } - }; - - template ::Value> - struct TreatAsQObjectBeforeMetaType : ObjectInvoker - { - }; - - template - struct TreatAsQObjectBeforeMetaType : MetaTypeInvoker - { - }; - - template struct QVariantValueHelper; -} - class Q_CORE_EXPORT QVariant { public: @@ -518,7 +485,6 @@ protected: #endif template friend inline T qvariant_cast(const QVariant &); - template friend struct QtPrivate::QVariantValueHelper; protected: Private d; void create(int type, const void *copy); @@ -722,39 +688,16 @@ public: }; #ifndef QT_MOC -namespace QtPrivate { - template - struct QVariantValueHelper : TreatAsQObjectBeforeMetaType, T, const QVariant &, T> - { - static T metaType(const QVariant &v) - { - const int vid = qMetaTypeId(); - if (vid == v.userType()) - return *reinterpret_cast(v.constData()); - T t; - if (v.convert(vid, &t)) - return t; - return T(); - } -#ifndef QT_NO_QOBJECT - static T object(const QVariant &v) - { - return qobject_cast(QMetaType::typeFlags(v.userType()) & QMetaType::PointerToQObject - ? v.d.get() - : QVariantValueHelper::metaType(v)); - } -#endif - }; - - template - struct QVariantValueHelperInterface : QVariantValueHelper - { - }; -} template inline T qvariant_cast(const QVariant &v) { - return QtPrivate::QVariantValueHelperInterface::invoke(v); + QMetaType targetType = QMetaType::fromType(); + if (v.d.type() == targetType) + return v.d.get(); + + T t{}; + QMetaType::convert(v.constData(), v.userType(), &t, qMetaTypeId()); + return t; } template<> inline QVariant qvariant_cast(const QVariant &v) -- cgit v1.2.3