<QtCompare> - 用于定义比较运算符的类和帮手

< QtCompare > 头文件定义 Qt::*_ordering 类型和帮手宏为定义比较运算符。 更多...

头: #include <QtCompare>

函数

(从 6.7 起) Qt::strong_ordering compareThreeWay (LeftInt lhs , RightInt rhs )
(从 6.7 起) Qt::partial_ordering compareThreeWay (LeftFloat lhs , RightFloat rhs )
(从 6.7 起) Qt::partial_ordering compareThreeWay (IntType lhs , FloatType rhs )
(从 6.7 起) Qt::partial_ordering compareThreeWay (FloatType lhs , IntType rhs )
(从 6.7 起) Qt::strong_ordering compareThreeWay (const LeftType * lhs , const RightType * rhs )
(从 6.7 起) Qt::strong_ordering compareThreeWay (Enum lhs , Enum rhs )
(从 6.7 起) auto qCompareThreeWay (const LeftType & lhs , const RightType & rhs )

详细描述

此 Header (头) 引入 Qt::partial_ordering , Qt::weak_ordering ,和 Qt::strong_ordering 类型,它们是 Qt 的 C++17 后端对于 std::*_ordering 类型。

此 Header (头) 还包含用于实现 C++17 的 3 向比较函数。

The Qt::compareThreeWay() 函数重载为内置 C++ 类型提供 3 向比较。

The qCompareThreeWay () 模板充当一般 3 向比较实现。它依赖 Qt::compareThreeWay() 和自由 compareThreeWay() 函数在其实现中。

函数文档编制

[constexpr noexcept, since 6.7] template <typename LeftInt, typename RightInt, Qt::if_integral<LeftInt> = true, Qt::if_integral = true> Qt::strong_ordering compareThreeWay ( LeftInt lhs , RightInt rhs )

这是重载函数。

实现整型类型的 3 向比较。

注意: 此函数仅参与重载解析,若两者 LeftInt and RightInt 是内置整型类型。

返回 lhs <=> rhs ,提供的 LeftInt and RightInt 是内置整型类型。不像 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)
};
					

返回实例化的 Qt::strong_ordering 表示关系介于 lhs and rhs .

该函数在 Qt 6.7 引入。

[constexpr noexcept, since 6.7] template <typename LeftFloat, typename RightFloat, Qt::if_floating_point<LeftFloat> = true, Qt::if_floating_point = true> Qt::partial_ordering compareThreeWay ( LeftFloat lhs , RightFloat rhs )

这是重载函数。

实现浮点类型的 3 向比较。

注意: 此函数仅参与重载解析,若两者 LeftFloat and RightFloat 是内置浮点类型。

返回 lhs <=> rhs ,提供的 LeftFloat and RightFloat 是内置浮点类型。不像 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)
};
					

返回实例化的 Qt::partial_ordering 表示关系介于 lhs and rhs 。若 lhs or rhs 是 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 = true> Qt::partial_ordering compareThreeWay ( IntType lhs , FloatType rhs )

这是重载函数。

实现整型类型和浮点类型的 3 向比较。

注意: 此函数仅参与重载解析,若 IntType 是内置整型类型和 FloatType 是内置浮点类型。

此函数转换 lhs to FloatType 并调用用于浮点类型的重载。

返回实例化的 Qt::partial_ordering 表示关系介于 lhs and rhs 。若 rhs 是 NaN (非数字), Qt::partial_ordering::unordered 被返回。

该函数在 Qt 6.7 引入。

[constexpr noexcept, since 6.7] template <typename FloatType, typename IntType, Qt::if_floating_point<FloatType> = true, Qt::if_integral = true> Qt::partial_ordering compareThreeWay ( FloatType lhs , IntType rhs )

这是重载函数。

实现浮点类型和整型类型的 3 向比较。

注意: 此函数仅参与重载解析,若 FloatType is a built-in floating-point type and IntType is a built-in integral type.

此函数转换 rhs to FloatType 并调用用于浮点类型的重载。

返回实例化的 Qt::partial_ordering 表示关系介于 lhs and rhs 。若 lhs 是 NaN (非数字), Qt::partial_ordering::unordered 被返回。

该函数在 Qt 6.7 引入。

[constexpr noexcept, since 6.7] template <typename LeftType, typename RightType, Qt::if_compatible_pointers<LeftType, RightType> = true> Qt::strong_ordering compareThreeWay (const LeftType * lhs , const RightType * rhs )

这是重载函数。

实现指针的 3 向比较。

注意: 此函数参与重载解析,若 LeftType and RightType are the same type, or base and derived types. It is also used to compare any pointer to std::nullptr_t .

返回实例化的 Qt::strong_ordering 表示关系介于 lhs and rhs .

该函数在 Qt 6.7 引入。

[constexpr noexcept, since 6.7] template <typename Enum, Qt::if_enum<Enum> = true> Qt::strong_ordering compareThreeWay ( Enum lhs , Enum rhs )

这是重载函数。

实现枚举类型的 3 向比较。

注意: 此函数仅参与重载解析,若 Enum 是枚举类型。

此函数转换 Enum 到其底层类型,并调用用于整型类型的重载。

返回实例化的 Qt::strong_ordering 表示关系介于 lhs and rhs .

该函数在 Qt 6.7 引入。

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

Performs the three-way comparison on lhs and rhs and returns one of the Qt ordering types as a result. This function is available for both C++17 and C++20.

The actual returned type depends on LeftType and RightType .

注意: This function template is only available when compareThreeWay() is implemented for the (LeftType, RightType) pair or the reversed (RightType, LeftType) pair.

This method is equivalent to

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

where Qt::compareThreeWay is the Qt implementation of three-way comparison for built-in types.

The free compareThreeWay functions should provide three-way comparison for custom types. The functions should return one of the Qt ordering types.

Qt 提供 compareThreeWay implementation for some of its types.

注意: Do not re-implement compareThreeWay() for Qt types, as more Qt types will get support for it in future Qt releases.

Use this function primarly in generic code, when you know nothing about LeftType and RightType .

If you know the types, use

  • Qt::compareThreeWay 对于内置类型
  • compareThreeWay for custom types

使用 operator<=>() directly in code that will only be compiled with C++20 or later.

该函数在 Qt 6.7 引入。

另请参阅 Qt::partial_ordering , Qt::weak_ordering ,和 Qt::strong_ordering .