Tan*_*yal 5 c++ spaceship-operator c++20
假设我有一个带有 struct 的 C 库cat,以及一个compare(cat a, cat b)根据以下规则返回整数的函数:-
我正在为此库编写 C++ 包装器(例如catxx,使用ctC 结构成员),并希望使用新的 C++20 太空船运算符。
bool operator == (catxx& a, catxx& b)
{
return !compare(a.ct, b.ct);
}
auto operator <=> (catxx& a, catxx& b)
{
int result = compare(a.ct, b.ct);
return /*what ?*/;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做?我无法理解订购概念。
if else而不是怎么办compare()?来自cppreference:
三路比较运算符表达式的形式为
Run Code Online (Sandbox Code Playgroud)lhs <=> rhs该表达式返回一个对象,使得
(a <=> b) < 0如果lhs<rhs(a <=> b) > 0如果lhs>rhs(a <=> b) == 0如果lhs和rhs相等/等效。
所以你可以简单地做
auto operator <=> (catxx& a, catxx& b)
{
return compare(a.ct, b.ct) <=> 0;
}
Run Code Online (Sandbox Code Playgroud)
由于操作数是整型,因此该运算符生成 类型的纯右值std::strong_ordering。
| 归档时间: |
|
| 查看次数: |
602 次 |
| 最近记录: |