<QtCompare> - Classes and helpers for defining comparison operators

Die <QtCompare> Headerdatei definiert Qt::*_ordering Typen und Hilfsmakros zur Definition von Vergleichsoperatoren. Mehr...

Header: #include <QtCompare>

Funktionen

(since 6.7) Qt::strong_ordering compareThreeWay(Enum lhs, Enum rhs)
(since 6.7) auto compareThreeWay(FloatType lhs, IntType rhs)
(since 6.7) auto compareThreeWay(IntType lhs, FloatType rhs)
(since 6.7) auto compareThreeWay(LeftFloat lhs, RightFloat rhs)
(since 6.7) auto compareThreeWay(LeftInt lhs, RightInt rhs)
(since 6.8) Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, Qt::totally_ordered_wrapper<U *> rhs)
(since 6.8) Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, U *rhs)
(since 6.8) Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, std::nullptr_t rhs)
(since 6.8) Qt::strong_ordering compareThreeWay(U *lhs, Qt::totally_ordered_wrapper<T *> rhs)
(since 6.8) Qt::strong_ordering compareThreeWay(std::nullptr_t lhs, Qt::totally_ordered_wrapper<T *> rhs)
(since 6.7) auto qCompareThreeWay(const LeftType &lhs, const RightType &rhs)

Detaillierte Beschreibung

Dieser Header stellt die Typen Qt::partial_ordering, Qt::weak_ordering und Qt::strong_ordering vor, die Qt's C++17 Backports der std::*_ordering Typen sind.

Dieser Header enthält auch Funktionen zur Implementierung von Drei-Wege-Vergleichen in C++17.

Die Qt::compareThreeWay() Funktionsüberladungen ermöglichen den Drei-Wege-Vergleich für eingebaute C++-Typen.

Die Schablone qCompareThreeWay() dient als generische Implementierung des Drei-Wege-Vergleichs. Sie stützt sich bei ihrer Implementierung auf die Funktionen Qt::compareThreeWay() und free compareThreeWay().

Funktionsdokumentation

[constexpr noexcept, since 6.7] template <typename Enum, Qt::if_enum<Enum> = true> Qt::strong_ordering compareThreeWay(Enum lhs, Enum rhs)

Dies ist eine überladene Funktion.

Implementiert den Drei-Wege-Vergleich von Enum-Typen.

Hinweis: Diese Funktion nimmt nur an der Überladungsauflösung teil, wenn Enum ein Aufzählungstyp ist.

Diese Funktion konvertiert Enum in seinen zugrundeliegenden Typ und ruft die Überladung für ganzzahlige Typen auf.

Gibt eine Instanz von Qt::strong_ordering zurück, die die Beziehung zwischen lhs und rhs darstellt.

Diese Funktion wurde in Qt 6.7 eingeführt.

[constexpr noexcept, since 6.7] template <typename FloatType, typename IntType, Qt::if_floating_point<FloatType> = true, Qt::if_integral<IntType> = true> auto compareThreeWay(FloatType lhs, IntType rhs)

Dies ist eine überladene Funktion.

Implementiert den Drei-Wege-Vergleich von Fließkomma- und Integral-Typen.

Hinweis: Diese Funktion nimmt nur an der Überladungsauflösung teil, wenn FloatType ein eingebauter Fließkommatyp und IntType ein eingebauter Integraltyp ist.

Diese Funktion konvertiert rhs in FloatType und ruft die Überladung für Fließkommatypen auf.

Gibt eine Instanz von Qt::partial_ordering zurück, die die Beziehung zwischen lhs und rhs darstellt. Wenn lhs keine Zahl (NaN) ist, wird Qt::partial_ordering::unordered zurückgegeben.

Diese Funktion wurde in Qt 6.7 eingeführt.

[constexpr noexcept, since 6.7] template <typename IntType, typename FloatType, Qt::if_integral<IntType> = true, Qt::if_floating_point<FloatType> = true> auto compareThreeWay(IntType lhs, FloatType rhs)

Dies ist eine überladene Funktion.

Implementiert den Drei-Wege-Vergleich von Integral- und Fließkommatypen.

Hinweis: Diese Funktion nimmt nur dann an der Überladungsauflösung teil, wenn IntType ein eingebauter Integral-Typ und FloatType ein eingebauter Fließkomma-Typ ist.

Diese Funktion konvertiert lhs in FloatType und ruft die Überladung für Fließkommatypen auf.

Gibt eine Instanz von Qt::partial_ordering zurück, die die Beziehung zwischen lhs und rhs darstellt. Wenn rhs keine Zahl (NaN) ist, wird Qt::partial_ordering::unordered zurückgegeben.

Diese Funktion wurde in Qt 6.7 eingeführt.

[constexpr noexcept, since 6.7] template <typename LeftFloat, typename RightFloat, Qt::if_floating_point<LeftFloat> = true, Qt::if_floating_point<RightFloat> = true> auto compareThreeWay(LeftFloat lhs, RightFloat rhs)

Dies ist eine überladene Funktion.

Implementiert den Drei-Wege-Vergleich von Fließkommatypen.

Hinweis: Diese Funktion nimmt nur an der Überladungsauflösung teil, wenn sowohl LeftFloat als auch RightFloat eingebaute Fließkommatypen sind.

Gibt lhs <=> rhs zurück, sofern LeftFloat und RightFloat eingebaute Fließkommatypen sind. Im Gegensatz zu operator<=>() ist diese Funktionsvorlage auch in C++17 verfügbar. Siehe cppreference für weitere Details.

Diese Funktion kann auch in benutzerdefinierten compareThreeWay() Funktionen verwendet werden, wenn die Mitglieder einer benutzerdefinierten Klasse durch eingebaute Typen repräsentiert werden:

class MyClass {
public:
    ...
private:
    double value;
    ...
    friend Qt::partial_ordering
    compareThreeWay(const MyClass &lhs, const MyClass &rhs) noexcept
    { return Qt::compareThreeWay(lhs.value, rhs.value); }
    Q_DECLARE_PARTIALLY_ORDERED(MyClass)
};

Gibt eine Instanz von Qt::partial_ordering zurück, die die Beziehung zwischen lhs und rhs darstellt. Wenn lhs oder rhs keine Zahl (NaN) ist, wird Qt::partial_ordering::unordered zurückgegeben.

Diese Funktion wurde in Qt 6.7 eingeführt.

[constexpr noexcept, since 6.7] template <typename LeftInt, typename RightInt, Qt::if_integral<LeftInt> = true, Qt::if_integral<RightInt> = true> auto compareThreeWay(LeftInt lhs, RightInt rhs)

Dies ist eine überladene Funktion.

Implementiert den Drei-Wege-Vergleich von Integraltypen.

Hinweis: Diese Funktion nimmt nur dann an der Überladungsauflösung teil, wenn sowohl LeftInt als auch RightInt eingebaute Integraltypen sind.

Gibt lhs <=> rhs zurück, sofern LeftInt und RightInt eingebaute Integraltypen sind. Im Gegensatz zu operator<=>() ist diese Funktionsvorlage auch in C++17 verfügbar. Siehe cppreference für weitere Details.

Diese Funktion kann auch in benutzerdefinierten compareThreeWay() Funktionen verwendet werden, wenn die Mitglieder einer benutzerdefinierten Klasse durch eingebaute Typen repräsentiert werden:

class MyClass {
public:
    ...
private:
    int value;
    ...
    friend Qt::strong_ordering
    compareThreeWay(const MyClass &lhs, const MyClass &rhs) noexcept
    { return Qt::compareThreeWay(lhs.value, rhs.value); }
    Q_DECLARE_STRONGLY_ORDERED(MyClass)
};

Gibt eine Instanz von Qt::strong_ordering zurück, die die Beziehung zwischen lhs und rhs darstellt.

Diese Funktion wurde in Qt 6.7 eingeführt.

[constexpr noexcept, since 6.8] template <typename T, typename U, Qt::if_compatible_pointers<T, U> = true> Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, Qt::totally_ordered_wrapper<U *> rhs)

Dies ist eine überladene Funktion.

Implementiert den Drei-Wege-Vergleich von Zeigern, die in Qt::totally_ordered_wrapper verpackt sind. Verwendet beim Vergleich eine strikte Gesamtreihenfolge über Zeiger.

Hinweis: Diese Funktion nimmt an der Überladungsauflösung teil, wenn T und U derselbe Typ sind, oder Basis- und abgeleitete Typen.

Gibt eine Instanz von Qt::strong_ordering zurück, die die Beziehung zwischen lhs und rhs darstellt.

Diese Funktion wurde in Qt 6.8 eingeführt.

[constexpr noexcept, since 6.8] template <typename T, typename U, Qt::if_compatible_pointers<T, U> = true> Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, U *rhs)

Dies ist eine überladene Funktion.

Implementiert den Drei-Wege-Vergleich eines in Qt::totally_ordered_wrapper verpackten Zeigers mit einem normalen Zeiger. Verwendet beim Vergleich eine strenge Gesamtreihenfolge über Zeiger.

Hinweis: Diese Funktion nimmt an der Überladungsauflösung teil, wenn T und U derselbe Typ sind, oder Basis- und abgeleitete Typen.

Gibt eine Instanz von Qt::strong_ordering zurück, die die Beziehung zwischen lhs und rhs darstellt.

Diese Funktion wurde in Qt 6.8 eingeführt.

[constexpr noexcept, since 6.8] template <typename T> Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, std::nullptr_t rhs)

Dies ist eine überladene Funktion.

Implementiert den Drei-Wege-Vergleich eines in Qt::totally_ordered_wrapper verpackten Zeigers mit std::nullptr_t.

Gibt eine Instanz von Qt::strong_ordering zurück, die die Beziehung zwischen lhs und rhs darstellt.

Diese Funktion wurde in Qt 6.8 eingeführt.

[constexpr noexcept, since 6.8] template <typename T, typename U, Qt::if_compatible_pointers<T, U> = true> Qt::strong_ordering compareThreeWay(U *lhs, Qt::totally_ordered_wrapper<T *> rhs)

Dies ist eine überladene Funktion.

Implementiert einen Drei-Wege-Vergleich zwischen einem normalen Zeiger und einem Zeiger, der in Qt::totally_ordered_wrapper verpackt ist. Verwendet beim Vergleich eine strenge Gesamtreihenfolge über Zeiger.

Hinweis: Diese Funktion nimmt an der Überladungsauflösung teil, wenn T und U derselbe Typ sind, oder Basis- und abgeleitete Typen.

Gibt eine Instanz von Qt::strong_ordering zurück, die die Beziehung zwischen lhs und rhs darstellt.

Diese Funktion wurde in Qt 6.8 eingeführt.

[constexpr noexcept, since 6.8] template <typename T> Qt::strong_ordering compareThreeWay(std::nullptr_t lhs, Qt::totally_ordered_wrapper<T *> rhs)

Dies ist eine überladene Funktion.

Implementiert den Drei-Wege-Vergleich von std::nullptr_t mit einem in Qt::totally_ordered_wrapper verpackten Zeiger.

Gibt eine Instanz von Qt::strong_ordering zurück, die die Beziehung zwischen lhs und rhs darstellt.

Diese Funktion wurde in Qt 6.8 eingeführt.

[since 6.7] template <typename LeftType, typename RightType> auto qCompareThreeWay(const LeftType &lhs, const RightType &rhs)

Führt den Drei-Wege-Vergleich auf lhs und rhs durch und gibt einen der Qt-Bestellungstypen als Ergebnis zurück. Diese Funktion ist sowohl für C++17 als auch für C++20 verfügbar.

Der tatsächlich zurückgegebene Typ hängt von LeftType und RightType ab.

Hinweis: Diese Funktionsvorlage ist nur verfügbar, wenn compareThreeWay() für das Paar (LeftType, RightType) oder das umgekehrte Paar (RightType, LeftType) implementiert ist.

Diese Methode ist äquivalent zu

using Qt::compareThreeWay;
return compareThreeWay(lhs, rhs);

wobei Qt::compareThreeWay die Qt-Implementierung des Drei-Wege-Vergleichs für eingebaute Typen ist.

Die freien compareThreeWay Funktionen sollten den Drei-Wege-Vergleich für benutzerdefinierte Typen bereitstellen. Die Funktionen sollten einen der Qt-Bestellungstypen zurückgeben.

Qt bietet eine compareThreeWay Implementierung für einige seiner Typen.

Hinweis: Implementieren Sie compareThreeWay() nicht erneut für Qt-Typen, da weitere Qt-Typen in zukünftigen Qt-Releases Unterstützung dafür erhalten werden.

Verwenden Sie diese Funktion in erster Linie in generischem Code, wenn Sie nichts über LeftType und RightType wissen.

Wenn Sie die Typen kennen, verwenden Sie

  • Qt::compareThreeWay für eingebaute Typen
  • compareThreeWay für benutzerdefinierte Typen

Verwenden Sie operator<=>() direkt in Code, der nur mit C++20 oder höher kompiliert werden kann.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch Qt::partial_ordering, Qt::weak_ordering, und Qt::strong_ordering.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.