[Interest] QVariant compare operator
Thiago Macieira
thiago.macieira at intel.com
Mon Apr 20 17:54:41 CEST 2020
On Monday, 20 April 2020 08:04:38 MDT Matthew Woehlke wrote:
> On 19/04/2020 08.23, André Pönitz wrote:
> > QVariant(TypeA) and QVariant(TypeB) can be ordered for different TypeA and
> > TypeB based e.g. on alphabetical order of their .typeName().
> >
> > If wanted, this can be refined to make e.g. all integral types comparable.
>
> No:
>
> int{5} <=> JsonObject{...} => lesser
> int{5} <=> long{3} => greater
> long{3} <=> JsonObject{...} => greater
>
> ...oops.
I think, whatever we do, we will keep numeric type conversion. That code is
already there and is the least contentious part of the comparison code. When I
wrote it half a decade ago, I was very careful to follow the C++ integral type
promotion rules. The only new thing I'd do to that code is fix the comparison
of a negative qint64 to a quint64: type promotion rules and expectation don't
match (there's a new function in C++ to do that comparison in the "expected"
manner; can't recall the name).
I would argue that a new QVariant shouldn't even have multiple, different
numeric types, but just one or two (integral and floating point), like
QCborValue does. But since QVariant is built on top of QMetaType, which is
supposed to relate to concrete types in C++ so you can manipulate them in an
erased manner, that's not possible.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel System Software Products
More information about the Interest
mailing list