std::common_comparison_category
来自 cppreference.com
定义在头文件 <compare> 中 |
||
template< class... Ts > struct common_comparison_category |
(自 C++20 起) | |
类模板 std::common_comparison_category
提供一个别名(作为成员类型定义 type
),用于所有模板参数 Ts...
可以转换为的最强的比较类别。
详细地说,n 个类型 T
0...T
n-1 列表的通用比较类型定义如下
- 如果任何
T
i 不是比较类别类型 (std::partial_ordering,std::weak_ordering,std::strong_ordering),U
是 void. - 否则,如果至少有一个
T
i 是 std::partial_ordering,U
是 std::partial_ordering. - 否则,如果至少有一个
T
i 是 std::weak_ordering,U
是 std::weak_ordering. - 否则(如果每个
T
i 都是 std::strong_ordering,或者列表为空),U
是 std::strong_ordering.
内容 |
[edit] 模板参数
...Ts | - | 一个可能为空的类型列表 |
[edit] 辅助模板
template< class... Ts > using common_comparison_category_t = common_comparison_category<Ts...>::type; |
(自 C++20 起) | |
[edit] 成员类型
成员类型 | 定义 |
type
|
最强的通用比较类别(如上定义) |
[edit] 可能的实现
namespace detail { template<unsigned int> struct common_cmpcat_base { using type = void; }; template<> struct common_cmpcat_base<0u> { using type = std::strong_ordering; }; template<> struct common_cmpcat_base<2u> { using type = std::partial_ordering; }; template<> struct common_cmpcat_base<4u> { using type = std::weak_ordering; }; template<> struct common_cmpcat_base<6u> { using type = std::partial_ordering; }; } // namespace detail template<class...Ts> struct common_comparison_category : detail::common_cmpcat_base<(0u | ... | (std::is_same_v<Ts, std::strong_ordering> ? 0u : std::is_same_v<Ts, std::weak_ordering> ? 4u : std::is_same_v<Ts, std::partial_ordering> ? 2u : 1u) )> {}; |
[edit] 示例
本节内容不完整 原因:无示例 |
[edit] 另请参阅
(C++20) |
支持所有 6 个运算符且可替换的三方比较的结果类型 (类) |
(C++20) |
支持所有 6 个运算符且不可替换的三方比较的结果类型 (类) |
(C++20) |
支持所有 6 个运算符,不可替换,并允许不可比较值的三方比较的结果类型 (类) |