diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-09-10 18:36:27 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-09-14 12:41:00 +0200 |
commit | 721116de309f1933fad788fe4272c0d5c12b9909 (patch) | |
tree | 8cdd34d2f1c8cffbb31b05e448fbb7494082ad6b /src/corelib/kernel/qvariant.h | |
parent | cdb9ffd7e1e075a5fafb1477e2e87bef0b3fa49d (diff) |
Add QVariantRef, QVariantPointer, QVariantConstPointer
Change-Id: Ia329265826ab2f76e77ac14bb8d8e415a1b41dd6
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/kernel/qvariant.h')
-rw-r--r-- | src/corelib/kernel/qvariant.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h index ad766c9a8e..796dd80fd7 100644 --- a/src/corelib/kernel/qvariant.h +++ b/src/corelib/kernel/qvariant.h @@ -662,6 +662,55 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QVariant &); Q_CORE_EXPORT QDebug operator<<(QDebug, const QVariant::Type); #endif +template<typename Pointer> +class Q_CORE_EXPORT QVariantRef +{ +private: + const Pointer *m_pointer = nullptr; + +public: + explicit QVariantRef(const Pointer *reference) : m_pointer(reference) {} + QVariantRef(const QVariantRef &) = default; + QVariantRef(QVariantRef &&) = default; + ~QVariantRef() = default; + + operator QVariant() const; + QVariantRef &operator=(const QVariant &value); + QVariantRef &operator=(const QVariantRef &value) { return operator=(QVariant(value)); } + QVariantRef &operator=(QVariantRef &&value) { return operator=(QVariant(value)); } + + friend void swap(QVariantRef a, QVariantRef b) + { + QVariant tmp = a; + a = b; + b = std::move(tmp); + } +}; + +class Q_CORE_EXPORT QVariantConstPointer +{ +private: + QVariant m_variant; + +public: + explicit QVariantConstPointer(QVariant variant); + + QVariant operator*() const; + const QVariant *operator->() const; +}; + +template<typename Pointer> +class Q_CORE_EXPORT QVariantPointer +{ +private: + const Pointer *m_pointer = nullptr; + +public: + explicit QVariantPointer(const Pointer *pointer) : m_pointer(pointer) {} + QVariantRef<Pointer> operator*() const { return QVariantRef<Pointer>(m_pointer); } + Pointer operator->() const { return *m_pointer; } +}; + QT_END_NAMESPACE #endif // QVARIANT_H |