Qt::totally_ordered_wrapper Class
template <typename P> class Qt::totally_ordered_wrapperQt::totally_ordered_wrapper ist ein Wrapper-Typ, der eine strenge Gesamtordnung für die umschlossenen Typen gewährleistet. Mehr...
| Header: | #include <QtCompare> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Seit: | Qt 6.8 |
Öffentliche Funktionen
Ausführliche Beschreibung
Qt::totally_ordered_wrapper<P> ist eine Template-Klasse, bei der P den zu umhüllenden Typ angibt.
Einer der Hauptanwendungsfälle besteht darin, undefiniertes Verhalten (Undefined Behavior, UB) beim Vergleich von Zeigern zu verhindern.
Betrachten Sie die folgende einfache Klasse:
template <typename T>
struct PointerWrapperBad {
int val;
T *ptr;
};Ein lexikografischer Vergleich der beiden Instanzen des Typs „ PointerWrapperBad “ würde zu UB führen, da dabei die Methoden „ operator<() “ oder „ operator<=>() “ für die „ ptr “-Mitglieder aufgerufen würden.
Um dies zu beheben, verwenden Sie den neuen Wrapper-Typ:
template <typename T>
struct PointerWrapperGood {
int val;
Qt::totally_ordered_wrapper<T *> ptr;
friend bool
operator==(PointerWrapperGood lhs, PointerWrapperGood rhs) noexcept = default;
friend auto
operator<=>(PointerWrapperGood lhs, PointerWrapperGood rhs) noexecpt = default;
};Die Operatoren ` operator<() ` und (falls verfügbar) ` operator<=>() ` für den Typ ` Qt::totally_ordered_wrapper ` verwenden jeweils die Funktionsobjekte `std::less` und `std::compare_three_way`, wodurch beim Vergleich eine strenge Gesamtordnung über Zeiger gewährleistet wird.
Dadurch sind die Relationoperatoren für das Element „ PointerWrapperGood::ptr “ wohldefiniert, und wir können die Relationoperatoren für die Klasse „ PointerWrapperGood “ sogar wie oben gezeigt „ =default “ verwenden.
Dokumentation der Mitgliedsfunktionen
[noexcept default] totally_ordered_wrapper::totally_ordered_wrapper()
Erstellt standardmäßig eine Instanz von ` totally_ordered_wrapper`.
© 2026 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.