diff options
author | Stephen Kelly <stephen.kelly@kdab.com> | 2012-08-16 02:18:19 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-08-20 10:11:03 +0200 |
commit | 2fe35bf9a0f4d3cd5434026e1a01933444031212 (patch) | |
tree | a29771f8dad4c14707d92946aeca987e6276e650 | |
parent | d2bba5e5535726f277e8dc67b1478168f57b24bd (diff) |
Refactor the automatic metatype templates into preprocessor lists.
This will allow re-use in moc.
Change-Id: I99c5f8f0756fccf0fb2bb845c29255c14d4d703e
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
-rw-r--r-- | src/corelib/kernel/qmetatype.h | 64 |
1 files changed, 40 insertions, 24 deletions
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index a40bd77e5a..ce7bddd66c 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -717,15 +717,6 @@ QT_FOR_EACH_STATIC_WIDGETS_CLASS(QT_FORWARD_DECLARE_STATIC_TYPES_ITER) #undef QT_FORWARD_DECLARE_STATIC_TYPES_ITER -template <class T> class QList; -template <class T> class QLinkedList; -template <class T> class QVector; -template <class T> class QQueue; -template <class T> class QStack; -template <class T> class QSet; -template <class T1, class T2> class QMap; -template <class T1, class T2> class QHash; -template <class T1, class T2> struct QPair; typedef QList<QVariant> QVariantList; typedef QMap<QString, QVariant> QVariantMap; typedef QHash<QString, QVariant> QVariantHash; @@ -792,18 +783,6 @@ struct QMetaTypeId< DOUBLE_ARG_TEMPLATE<T, U> > \ } \ }; -Q_DECLARE_METATYPE_TEMPLATE_1ARG(QList) -Q_DECLARE_METATYPE_TEMPLATE_1ARG(QVector) -Q_DECLARE_METATYPE_TEMPLATE_1ARG(QQueue) -Q_DECLARE_METATYPE_TEMPLATE_1ARG(QStack) -Q_DECLARE_METATYPE_TEMPLATE_1ARG(QSet) -Q_DECLARE_METATYPE_TEMPLATE_1ARG(QLinkedList) - -Q_DECLARE_METATYPE_TEMPLATE_2ARG(QHash) -Q_DECLARE_METATYPE_TEMPLATE_2ARG(QMap) -Q_DECLARE_METATYPE_TEMPLATE_2ARG(QPair) - - #define Q_DECLARE_SMART_POINTER_METATYPE(SMART_POINTER) \ template <typename T, bool = QtPrivate::IsPointerToTypeDerivedFromQObject<T*>::Value> \ struct QMetaTypeId_ ## SMART_POINTER ## _QObjectStar \ @@ -835,9 +814,46 @@ struct QMetaTypeId< SMART_POINTER<T> > : public QMetaTypeId_ ## SMART_POINTER ## { \ }; -Q_DECLARE_SMART_POINTER_METATYPE(QSharedPointer) -Q_DECLARE_SMART_POINTER_METATYPE(QWeakPointer) -Q_DECLARE_SMART_POINTER_METATYPE(QPointer) +#define QT_FOR_EACH_AUTOMATIC_TEMPLATE_1ARG(F) \ + F(QList) \ + F(QVector) \ + F(QQueue) \ + F(QStack) \ + F(QSet) \ + F(QLinkedList) + +#define QT_FOR_EACH_AUTOMATIC_TEMPLATE_2ARG(F) \ + F(QHash, class) \ + F(QMap, class) \ + F(QPair, struct) + +#define QT_FOR_EACH_AUTOMATIC_TEMPLATE_SMART_POINTER(F) \ + F(QSharedPointer) \ + F(QWeakPointer) \ + F(QPointer) + +#define Q_DECLARE_METATYPE_TEMPLATE_1ARG_ITER(TEMPLATENAME) \ + template <class T> class TEMPLATENAME; \ + Q_DECLARE_METATYPE_TEMPLATE_1ARG(TEMPLATENAME) + +QT_FOR_EACH_AUTOMATIC_TEMPLATE_1ARG(Q_DECLARE_METATYPE_TEMPLATE_1ARG_ITER) + +#undef Q_DECLARE_METATYPE_TEMPLATE_1ARG_ITER + +#define Q_DECLARE_METATYPE_TEMPLATE_2ARG_ITER(TEMPLATENAME, CPPTYPE) \ + template <class T1, class T2> CPPTYPE TEMPLATENAME; \ + Q_DECLARE_METATYPE_TEMPLATE_2ARG(TEMPLATENAME) + +QT_FOR_EACH_AUTOMATIC_TEMPLATE_2ARG(Q_DECLARE_METATYPE_TEMPLATE_2ARG_ITER) + +#undef Q_DECLARE_METATYPE_TEMPLATE_2ARG_ITER + +#define Q_DECLARE_METATYPE_TEMPLATE_SMART_POINTER_ITER(TEMPLATENAME) \ + Q_DECLARE_SMART_POINTER_METATYPE(TEMPLATENAME) + +QT_FOR_EACH_AUTOMATIC_TEMPLATE_SMART_POINTER(Q_DECLARE_METATYPE_TEMPLATE_SMART_POINTER_ITER) + +#undef Q_DECLARE_METATYPE_TEMPLATE_SMART_POINTER_ITER inline QMetaType::QMetaType(const ExtensionFlag extensionFlags, const QMetaTypeInterface *info, Creator creator, |