【发布时间】:2021-03-29 11:10:54
【问题描述】:
前段时间我定义了我的第一个三路比较运算符。它比较了单一类型并替换了多个常规运算符。很棒的功能。然后我尝试实现一个类似的运算符来通过委托比较两个变体:
auto operator <=> (const QVariant& l, const QVariant& r)
{
switch (l.type())
{
case QMetaType::Int:
return l.toInt() <=> r.toInt();
case QMetaType::Double:
return l.toDouble() <=> r.toDouble();
default:
throw;
}
}
这不能编译,我得到错误
自动返回类型的扣除不一致:“std::strong_ordering”然后是“std::partial_ordering”。
显然int 和double spaceship 运算符返回不同的类型。
解决这个问题的正确方法是什么?
【问题讨论】:
-
<=>不需要表现得对称吗?仅打开l.type()就违反了该属性。 -
@Bergi 你是对的。这就是为什么在我的真实代码中我要检查类型的相等性。
标签: c++ qt c++20 return-type-deduction spaceship-operator