Qt::totally_ordered_wrapper Class
template <typename P> class Qt::totally_ordered_wrapperQt::totally_ordered_wrapper est un type « wrapper » qui assure un ordre total strict pour les types qu'il encapsule. En savoir plus...
| En-tête : | #include <QtCompare> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Depuis : | Qt 6.8 |
Fonctions publiques
Description détaillée
Qt::totally_ordered_wrapper<P> est une classe de modèle où P spécifie le type à encapsuler.
L'un de ses principaux cas d'utilisation consiste à éviter les comportements indéfinis (UB) lors de la comparaison de pointeurs.
Considérons la classe simple suivante :
template <typename T>
struct PointerWrapperBad {
int val;
T *ptr;
};La comparaison lexicographique des deux instances du type ` PointerWrapperBad ` entraînerait un comportement indéfini (UB), car elle appellerait ` operator<() ` ou ` operator<=>() ` sur les membres ` ptr `.
Pour y remédier, utilisez le nouveau type wrapper :
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;
};Les opérateurs operator<() et (le cas échéant) operator<=>() du type Qt::totally_ordered_wrapper utilisent respectivement les objets-fonctions std::less et std::compare_three_way, assurant ainsi un ordre total strict sur les pointeurs lors de la comparaison.
Par conséquent, les opérateurs relationnels du membre ` PointerWrapperGood::ptr ` seront bien définis, et nous pouvons même ` =default ` les opérateurs relationnels de la classe ` PointerWrapperGood `, comme illustré ci-dessus.
Documentation des fonctions membres
[noexcept default] totally_ordered_wrapper::totally_ordered_wrapper()
Construit par défaut une instance de ` 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.