Sur cette page

Qt::totally_ordered_wrapper Class

template <typename P> class Qt::totally_ordered_wrapper

Qt::totally_ordered_wrapper est un type enveloppant qui fournit un ordre total strict pour les types enveloppés. Plus d'informations...

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

Description détaillée

L'une de ses principales utilisations est d'empêcher les comportements non dé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 résulterait en un comportement non défini, car elle appellerait operator<() ou operator<=>() sur les membres ptr.

Pour résoudre ce problème, il faut utiliser le nouveau type enveloppant :

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 (si disponible) operator<=>() pour le type Qt::totally_ordered_wrapper utilisent respectivement les objets fonctionnels std::less et std::compare_three_way, fournissant un ordre total strict sur les pointeurs lors de la comparaison.

En conséquence, les opérateurs relationnels pour le membre PointerWrapperGood::ptr seront bien définis, et nous pouvons même =default les opérateurs relationnels pour la classe PointerWrapperGood, comme indiqué ci-dessus.

© 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.