totally_ordered_wrapper Class
template <typename P> class Qt::totally_ordered_wrapperQt::totally_ordered_wrapper ist ein Wrapper-Typ, der eine strenge Gesamtreihenfolge für die umhüllten Typen bietet. Mehr...
Kopfzeile: | #include <QtCompare> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Seit: | Qt 6.8 |
Detaillierte Beschreibung
Einer der Hauptanwendungsfälle ist die Verhinderung von Undefined Behavior (UB) beim Vergleich von Zeigern.
Betrachten Sie die folgende einfache Klasse:
template <typename T> struct PointerWrapperBad { int val; T *ptr; };
Ein lexikographischer Vergleich der beiden Instanzen des Typs PointerWrapperBad
würde zu UB führen, da er operator<()
oder operator<=>()
auf den ptr
Membern aufrufen würde.
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 vorhanden) operator<=>()
für den Typ Qt::totally_ordered_wrapper
verwenden die Funktionsobjekte std::less bzw. std::compare_three_way, die beim Vergleich eine strikte Gesamtreihenfolge über Zeiger gewährleisten.
Infolgedessen sind die relationalen Operatoren für die Mitglieder von PointerWrapperGood::ptr
wohldefiniert, und wir können sogar =default
die relationalen Operatoren für die Klasse PointerWrapperGood
verwenden, wie es oben gezeigt wird.
© 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.