<QtCompare> - Classes and helpers for defining comparison operators
<QtCompare> ヘッダーファイルは、Qt::*_ordering
型と比較演算子を定義するヘルパーマクロを定義しています。詳細...
Header: | #include <QtCompare> |
関数
(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) |
詳細な説明
このヘッダーは、std::*_ordering
型の Qt C++17 バックポートであるQt::partial_ordering 型、Qt::weak_ordering 型、Qt::strong_ordering 型を紹介します。
このヘッダーには、C++17 で 3 者間比較を実装するための関数も含まれています。
Qt::compareThreeWay()
関数のオーバーロードは、組み込み C++ 型の 3 者間比較を提供します。
qCompareThreeWay() テンプレートは、一般的な 3 者間比較の実装として機能します。この関数の実装では、Qt::compareThreeWay()
および freecompareThreeWay()
関数に依存しています。
関数のドキュメント
[constexpr noexcept, since 6.7]
template <typename Enum, Qt::if_enum<Enum> = true> Qt::strong_ordering compareThreeWay(Enum lhs, Enum rhs)
これはオーバーロードされた関数である。
列挙型の三者比較を実装する。
注: Enum
が列挙型の場合のみ、この関数はオーバーロード解決に参加します。
この関数は、Enum
をその基礎となる型に変換し、積分型のオーバーロードを呼び出します。
lhs とrhs の関係を表すQt::strong_ordering のインスタンスを返します。
この関数は Qt 6.7 で導入されました。
[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)
これはオーバーロードされた関数である。
浮動小数点型と積分型の三元比較を実装する。
注: FloatType
が組み込み浮動小数点型で、IntType
が組み込み積分型の場合のみ、この関数はオーバーロード解決に参加します。
この関数はrhs をFloatType
に変換し、浮動小数点型のオーバーロードを呼び出します。
lhs とrhs の関係を表すQt::partial_ordering のインスタンスを返します。lhs が数値(NaN)でない場合、Qt::partial_ordering::unordered が返されます。
この関数は Qt 6.7 で導入されました。
[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)
これはオーバーロードされた関数である。
積分型と浮動小数点型の3元比較を実装している。
注意: この関数は、IntType
が組込み整数型で、FloatType
が組込み浮動小数点型の場合のみ、オーバーロード解決に参加する。
この関数はlhs をFloatType
に変換し、浮動小数点型のオーバーロードを呼び出します。
lhs とrhs の関係を表すQt::partial_ordering のインスタンスを返します。rhs が数値(NaN)でない場合、Qt::partial_ordering::unordered が返されます。
この関数は Qt 6.7 で導入されました。
[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)
これはオーバーロードされた関数である。
浮動小数点型の三元比較を実装する。
注意: この関数は、LeftFloat
とRightFloat
の両方が組み込み浮動小数点型の場合のみ、オーバーロード解決に参加します。
LeftFloat
とRightFloat
が組み込み浮動小数点型である場合、lhs <=> rhs
を返します。operator<=>()
と異なり、この関数テンプレートは C++17 でも使用できます。詳細はcppreference を参照してください。
この関数は、組み込み型によって表されるカスタム・クラスのメンバを順序付ける場合に、カスタムcompareThreeWay()
関数でも使用できます:
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) };
lhs とrhs の関係を表すQt::partial_ordering のインスタンスを返します。lhs またはrhs が数値(NaN)でない場合、Qt::partial_ordering::unordered が返されます。
この関数は Qt 6.7 で導入されました。
[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)
これはオーバーロードされた関数である。
積分型の3元比較を実装している。
注意: この関数は、LeftInt
とRightInt
の両方が組込みの積分型である場合にのみ、オーバーロード解決に参加します。
LeftInt
とRightInt
が組込み整数型である場合、lhs <=> rhs
を返します。operator<=>()
と異なり、この関数テンプレートは C++17 でも使用できます。詳細についてはcppreferenceを参照してください。
この関数は、組み込み型によって表されるカスタム・クラスのメンバを順序付ける場合に、カスタムcompareThreeWay()
関数でも使用できます:
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) };
lhs とrhs の関係を表すQt::strong_ordering のインスタンスを返します。
この関数は Qt 6.7 で導入されました。
[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)
これはオーバーロードされた関数である。
Qt::totally_ordered_wrapper にラップされたポインタの三者比較を実装しています。比較の際には、ポインタの厳密な合計順序を使用します。
注: この関数は、T
とU
が同じ型、または基底型と派生型の場合、オーバーロード解決に参加します。
lhs とrhs の関係を表すQt::strong_ordering のインスタンスを返します。
この関数は Qt 6.8 で導入されました。
[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)
これはオーバーロードされた関数である。
Qt::totally_ordered_wrapper にラップされたポインタと通常のポインタの三者比較を実装しています。比較の際には、ポインタの厳密な全順序を使用します。
注意: この関数は、T
とU
が同じ型、または基底型と派生型の場合、オーバーロード解決に参加します。
lhs とrhs の関係を表すQt::strong_ordering のインスタンスを返します。
この関数は Qt 6.8 で導入されました。
[constexpr noexcept, since 6.8]
template <typename T> Qt::strong_ordering compareThreeWay(Qt::totally_ordered_wrapper<T *> lhs, std::nullptr_t rhs)
これはオーバーロードされた関数である。
Qt::totally_ordered_wrapper にラップされたポインタとstd::nullptr_t
との三者比較を実装する。
lhs とrhs の関係を表すQt::strong_ordering のインスタンスを返します。
この関数は Qt 6.8 で導入されました。
[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)
これはオーバーロードされた関数である。
通常のポインタとQt::totally_ordered_wrapper にラップされたポインタの三者比較を実装しています。比較の際には、ポインタの厳密な全順序を使用します。
注: この関数は、T
とU
が同じ型、または基底型と派生型の場合、オーバーロード解決に参加します。
lhs とrhs の関係を表すQt::strong_ordering のインスタンスを返します。
この関数は Qt 6.8 で導入されました。
[constexpr noexcept, since 6.8]
template <typename T> Qt::strong_ordering compareThreeWay(std::nullptr_t lhs, Qt::totally_ordered_wrapper<T *> rhs)
これはオーバーロードされた関数である。
Qt::totally_ordered_wrapper にラップされたポインタとstd::nullptr_t
の三者比較を実装する。
lhs とrhs の関係を表すQt::strong_ordering のインスタンスを返します。
この関数は Qt 6.8 で導入されました。
[since 6.7]
template <typename LeftType, typename RightType> auto qCompareThreeWay(const LeftType &lhs, const RightType &rhs)
lhs とrhs で三者比較を行い、結果として Qt の順序型のいずれかを返します。こ の関数は C++17 と C++20 の両方で利用で き ます。
実際に返される型はLeftType
とRightType
に依存します。
注: この関数テンプレートは、compareThreeWay()
が(LeftType, RightType)
ペアまたは逆の(RightType, LeftType)
ペアに対して実装されている場合にのみ使用できます。
このメソッドは以下と等価です。
using Qt::compareThreeWay; return compareThreeWay(lhs, rhs);
ここで、Qt::compareThreeWay
は組み込み型に対する三元比較の Qt 実装です。
フリーのcompareThreeWay
関数は、カスタム型のための三 者比較を提供する必要があります。この関数は Qt の順序型のいずれかを返す必要があります。
Qtはいくつかの型に対してcompareThreeWay
の実装を提供しています。
注意: Qtの型については、compareThreeWay()
を再実装しないでください。将来のQtリリースでは、より多くのQt型がサポートされる予定です。
この関数は、LeftType
とRightType
について何も知らない場合に、ジェネリックコードで主に使用してください。
型がわかっている場合は
Qt::compareThreeWay
組み込み型にはcompareThreeWay
カスタム型
C++20 以降でのみコンパイルされるコードでは、operator<=>()
を直接使用してください。
この関数は Qt 6.7 で導入されました。
Qt::partial_ordering 、Qt::weak_ordering 、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.