<QtCompare> - 定义比较运算符的类和帮助程序

<QtCompare> 头文件定义了 Qt::*_ordering 类型以及用于定义比较运算符的帮助宏。 更多...

头文件 #include <QtCompare>

函数

(自 6.7) Qt::strong_orderingcompareThreeWay(LeftInt lhs, RightInt rhs)
(自 6.7) Qt::partial_orderingcompareThreeWay(LeftFloat lhs, RightFloat rhs)
(自 6.7) Qt::partial_orderingcompareThreeWay(IntType lhs, FloatType rhs)
(自 6.7) Qt::partial_orderingcompareThreeWay(FloatType lhs, IntType rhs)
(自 6.7) Qt::strong_orderingcompareThreeWay(const LeftType *lhs, const RightType *rhs)
(自 6.7) Qt::strong_orderingcompareThreeWay(Enum lhs, Enum rhs)
(自 6.7) autoqCompareThreeWay(const LeftType &lhs, const RightType &rhs)

详细描述

本头文件引入了 Qt::partial_orderingQt::weak_orderingQt::strong_ordering 类型,它们是 Qt 对 C++17 std::*_ordering 类型的后移植。

本头文件还包含用于实现 C++17 中三路比较的函数。

Qt::compareThreeWay() 函数重载提供了内置 C++ 类型的三路比较。

qCompareThreeWay() 模板提供了一个通用的三路比较实现。它在实现中依赖于 Qt::compareThreeWay() 和非成员的 compareThreeWay() 函数。

函数文档

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

这是一个重载函数。

实现整数类型的三路比较。

注意: 该函数仅在 LeftIntRightInt 都是内置整数类型时参与重载解析。

返回 lhs <=> rhs,假定 LeftIntRightInt 是内置整数类型。与 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)
};

返回一个< dönQt::strong_ordering >实例,表示<和rhs之间的关系。

此函数在Qt 6.7中引入。

[constexpr noexcept,自6.7以来] 模板< Qt::partial_ordering compareThreeWay (LeftFloat lhsRightFloat rhs)[constexpr noexcept,自6.7以来] 模板< Qt::partial_ordering compareThreeWay (IntType lhsFloatType rhs)

这是一个重载函数。

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

注意:仅当LeftFloatRightFloat都是内置浮点类型时,此函数才参与重载解析。

返回lhs <=> rhs,前提是LeftFloatRightFloat是内置浮点类型。与operator<=>()不同,此函数模板还可在C++17中使用。有关更多详细信息,请参阅< a href="https://en.cppreference.com/w/cpp/language/operator_comparison#Three-way_comparison" translate="no">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之间关系的< a href="qt-partial-ordering.html" translate="no">Qt::partial_ordering实例。如果lhsrhs不是数字(NaN),则返回Qt::partial_ordering::unordered

此函数在Qt 6.7中引入。

[constexpr noexcept,自6.7以来] 模板< Qt::partial_ordering compareThreeWay (IntType lhsFloatType rhs)[constexpr noexcept,自6.7以来] 模板< Qt::partial_ordering compareThreeWay (FloatType lhsIntType rhs)

这是一个重载函数。

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

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

此函数将lhs转换为FloatType并调用浮点类型重载。

返回一个表示lhsrhs之间关系的Qt::partial_ordering实例。如果rhs不是数字(NaN),则返回Qt::partial_ordering::unordered

此函数在Qt 6.7中引入。

[constexpr noexcept,自6.7以来] 模板< Qt::partial_ordering compareThreeWay (FloatType lhsIntType rhs)[constexpr noexcept,自6.7以来] 模板< Qt::partial_ordering compareThreeWay (LeftType *lhsRightType *rhs)

这是一个重载函数。

实现指针的三向比较。

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

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

返回一个表示lhsrhs之间关系的Qt::partial_ordering实例。如果lhs不是数字(NaN),则返回Qt::partial_ordering::unordered

此函数在Qt 6.7中引入。

[constexpr noexcept,自6.7以来] 模板< Qt::strong_ordering compareThreeWay (LeftType *lhsRightType *rhs)

这是一个重载函数。

实现指针的三向比较。

注意:当类型 LeftTypeRightType 相同或为基类型和派生类型时,该函数参与重载解析。它还用于比较任何指向 std::nullptr_t 的指针。

返回一个< dönQt::strong_ordering >实例,表示<和rhs之间的关系。

此函数在Qt 6.7中引入。

[constexpr noexcept, 自6.7起] 模板 <typename Enum, Qt::if_enum<Enum> = true> Qt::strong_ordering compareThreeWay(Enum lhs, Enum rhs)

这是一个重载函数。

实现枚举类型的三方比较。

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

该函数将 Enum 转换为其底层类型并调用积分类型的重载。

返回一个< dönQt::strong_ordering >实例,表示<和rhs之间的关系。

此函数在Qt 6.7中引入。

[自6.7起] 模板 <typename LeftType, typename RightType> auto qCompareThreeWay(const LeftType &lhs, const RightType &rhs)

lhsrhs 进行三方比较,并返回一个 Qt 排序类型作为结果。此函数对 C++17 和 C++20 均可用。

实际返回的类型取决于 LeftTypeRightType

注意:仅当为 (LeftType, RightType) 对或其反向的 (RightType, LeftType) 对实现了 compareThreeWay() 时,此函数模板才可用。

此方法等同于

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

其中 Qt::compareThreeWay 是 Qt 为内置类型实现的第三方比较。

自由 compareThreeWay 函数应提供自定义类型的三方比较。函数应返回 Qt 排序类型之一。

Qt 为其一些类型提供了 compareThreeWay 实现。

注意:不要 为 Qt 类型重新实现 compareThreeWay(),因为未来 Qt 版本中将有更多类型支持。

在泛型代码中使用此函数,当你对 LeftTypeRightType 知之甚少时。

如果知道类型,请使用

  • Qt::compareThreeWay 对内置类型
  • compareThreeWay 对自定义类型

在用 C++20 或更高版本编译的代码中直接使用 operator<=>()

此函数在Qt 6.7中引入。

另请参阅:Qt::partial_orderingQt::weak_orderingQt::strong_ordering

© 2024 The Qt Company Ltd. 本文档的贡献属于各自的权利人。本文档根据 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 的条款使用。Qt 和相应的标志是芬兰或世界各地 The Qt Company Ltd. 的商标。所有其他商标均为各自权利人的财产。