<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 をその基礎となる型に変換し、積分型のオーバーロードを呼び出します。

lhsrhs の関係を表す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 が組み込み積分型の場合のみ、この関数はオーバーロード解決に参加します。

この関数はrhsFloatType に変換し、浮動小数点型のオーバーロードを呼び出します。

lhsrhs の関係を表す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 が組込み浮動小数点型の場合のみ、オーバーロード解決に参加する。

この関数はlhsFloatType に変換し、浮動小数点型のオーバーロードを呼び出します。

lhsrhs の関係を表す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)

これはオーバーロードされた関数である。

浮動小数点型の三元比較を実装する。

注意: この関数は、LeftFloatRightFloat の両方が組み込み浮動小数点型の場合のみ、オーバーロード解決に参加します。

LeftFloatRightFloat が組み込み浮動小数点型である場合、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)
};

lhsrhs の関係を表す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元比較を実装している。

注意: この関数は、LeftIntRightInt の両方が組込みの積分型である場合にのみ、オーバーロード解決に参加します。

LeftIntRightInt が組込み整数型である場合、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)
};

lhsrhs の関係を表す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 にラップされたポインタの三者比較を実装しています。比較の際には、ポインタの厳密な合計順序を使用します。

注: この関数は、TU が同じ型、または基底型と派生型の場合、オーバーロード解決に参加します。

lhsrhs の関係を表す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 にラップされたポインタと通常のポインタの三者比較を実装しています。比較の際には、ポインタの厳密な全順序を使用します。

注意: この関数は、TU が同じ型、または基底型と派生型の場合、オーバーロード解決に参加します。

lhsrhs の関係を表す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 との三者比較を実装する。

lhsrhs の関係を表す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 にラップされたポインタの三者比較を実装しています。比較の際には、ポインタの厳密な全順序を使用します。

注: この関数は、TU が同じ型、または基底型と派生型の場合、オーバーロード解決に参加します。

lhsrhs の関係を表す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 の三者比較を実装する。

lhsrhs の関係を表すQt::strong_ordering のインスタンスを返します。

この関数は Qt 6.8 で導入されました。

[since 6.7] template <typename LeftType, typename RightType> auto qCompareThreeWay(const LeftType &lhs, const RightType &rhs)

lhsrhs で三者比較を行い、結果として Qt の順序型のいずれかを返します。こ の関数は C++17 と C++20 の両方で利用で き ます。

実際に返される型はLeftTypeRightType に依存します。

注: この関数テンプレートは、compareThreeWay()(LeftType, RightType) ペアまたは逆の(RightType, LeftType) ペアに対して実装されている場合にのみ使用できます。

このメソッドは以下と等価です。

using Qt::compareThreeWay;
return compareThreeWay(lhs, rhs);

ここで、Qt::compareThreeWay は組み込み型に対する三元比較の Qt 実装です。

フリーのcompareThreeWay 関数は、カスタム型のための三 者比較を提供する必要があります。この関数は Qt の順序型のいずれかを返す必要があります。

Qtはいくつかの型に対してcompareThreeWay の実装を提供しています。

注意: Qtの型については、compareThreeWay() を再実装しないでください。将来のQtリリースでは、より多くのQt型がサポートされる予定です。

この関数は、LeftTypeRightType について何も知らない場合に、ジェネリックコードで主に使用してください。

型がわかっている場合は

  • Qt::compareThreeWay 組み込み型には
  • compareThreeWay カスタム型

C++20 以降でのみコンパイルされるコードでは、operator<=>() を直接使用してください。

この関数は Qt 6.7 で導入されました。

Qt::partial_orderingQt::weak_orderingQt::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.