<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) |
详细描述
本头文件引入了 Qt::partial_ordering、Qt::weak_ordering 和 Qt::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)
这是一个重载函数。
实现整数类型的三路比较。
注意: 该函数仅在 LeftInt
和 RightInt
都是内置整数类型时参与重载解析。
返回 lhs <=> rhs
,假定 LeftInt
和 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) };
返回一个< dönQt::strong_ordering >实例,表示<和rhs之间的关系。
此函数在Qt 6.7中引入。
[constexpr noexcept,自6.7以来]
模板< Qt::partial_ordering compareThreeWay (LeftFloat lhs,RightFloat rhs)[constexpr noexcept,自6.7以来]
模板< Qt::partial_ordering compareThreeWay (IntType lhs,FloatType rhs)
[constexpr noexcept,自6.7以来]
模板< Qt::partial_ordering compareThreeWay (IntType lhs,FloatType rhs)这是一个重载函数。
实现浮点类型的三向比较。
注意:仅当LeftFloat
和RightFloat
都是内置浮点类型时,此函数才参与重载解析。
返回lhs <=> rhs
,前提是LeftFloat
和RightFloat
是内置浮点类型。与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) };
返回一个表示 lhs和rhs之间关系的< a href="qt-partial-ordering.html" translate="no">Qt::partial_ordering实例。如果lhs或rhs不是数字(NaN),则返回Qt::partial_ordering::unordered。
此函数在Qt 6.7中引入。
[constexpr noexcept,自6.7以来]
模板< Qt::partial_ordering compareThreeWay (IntType lhs,FloatType rhs)[constexpr noexcept,自6.7以来]
模板< Qt::partial_ordering compareThreeWay (FloatType lhs,IntType rhs)
[constexpr noexcept,自6.7以来]
模板< Qt::partial_ordering compareThreeWay (FloatType lhs,IntType rhs)这是一个重载函数。
实现整数和浮点类型的三向比较。
注意:仅当IntType
是内置整数类型且FloatType
是内置浮点类型时,此函数才参与重载解析。
此函数将lhs转换为FloatType
并调用浮点类型重载。
返回一个表示lhs和rhs之间关系的Qt::partial_ordering实例。如果rhs不是数字(NaN),则返回Qt::partial_ordering::unordered。
此函数在Qt 6.7中引入。
[constexpr noexcept,自6.7以来]
模板< Qt::partial_ordering compareThreeWay (FloatType lhs,IntType rhs)[constexpr noexcept,自6.7以来]
模板< Qt::partial_ordering compareThreeWay (LeftType *lhs,RightType *rhs)
[constexpr noexcept,自6.7以来]
模板< Qt::partial_ordering compareThreeWay (LeftType *lhs,RightType *rhs)这是一个重载函数。
实现指针的三向比较。
注意:仅当FloatType
是内置浮点类型且IntType
是内置整数类型时,此函数才参与重载解析。
此函数将rhs转换为FloatType
并调用浮点类型的重载。
返回一个表示lhs和rhs之间关系的Qt::partial_ordering实例。如果lhs不是数字(NaN),则返回Qt::partial_ordering::unordered。
此函数在Qt 6.7中引入。
[constexpr noexcept,自6.7以来]
模板< Qt::strong_ordering compareThreeWay (LeftType *lhs,RightType *rhs)
这是一个重载函数。
实现指针的三向比较。
注意:当类型 LeftType
和 RightType
相同或为基类型和派生类型时,该函数参与重载解析。它还用于比较任何指向 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)
对 lhs 和 rhs 进行三方比较,并返回一个 Qt 排序类型作为结果。此函数对 C++17 和 C++20 均可用。
实际返回的类型取决于 LeftType
和 RightType
。
注意:仅当为 (LeftType, RightType)
对或其反向的 (RightType, LeftType)
对实现了 compareThreeWay()
时,此函数模板才可用。
此方法等同于
using Qt::compareThreeWay; return compareThreeWay(lhs, rhs);
其中 Qt::compareThreeWay
是 Qt 为内置类型实现的第三方比较。
自由 compareThreeWay
函数应提供自定义类型的三方比较。函数应返回 Qt 排序类型之一。
Qt 为其一些类型提供了 compareThreeWay
实现。
注意:不要 为 Qt 类型重新实现 compareThreeWay()
,因为未来 Qt 版本中将有更多类型支持。
在泛型代码中使用此函数,当你对 LeftType
和 RightType
知之甚少时。
如果知道类型,请使用
Qt::compareThreeWay
对内置类型compareThreeWay
对自定义类型
在用 C++20 或更高版本编译的代码中直接使用 operator<=>()
。
此函数在Qt 6.7中引入。
另请参阅:Qt::partial_ordering、Qt::weak_ordering 和 Qt::strong_ordering。
© 2024 The Qt Company Ltd. 本文档的贡献属于各自的权利人。本文档根据 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 的条款使用。Qt 和相应的标志是芬兰或世界各地 The Qt Company Ltd. 的商标。所有其他商标均为各自权利人的财产。