On Tuesday 15 July 2014 10:38:52 Poenitz Andre wrote: > Olivier Goffart wrote: > > Jędrzej Nowacki wrote: > > > 1. Are we allowed to add new conversions? > > > > > > The question is tricky because adding a new conversion is a > > > behavior > > > change, as this code: > > > if (variant.canConvert(QMetaType::int)) ... > > > may work differently. If we add custom types into the mix, > > > everything > > > > > > is even more complex. > > > > I'd say yes, for sensible conversion > > You are right that it is a behaviour change, but i think it is worth > > changing it. > Why? > > On one hand you promise binary compatibility. On the other hand > behaviour changes are proposed to be done on an "nice to have" > base? > > Do we really think that's ok to disallow changing some int foo() { return > 42; } to some int bar() { return 42; } that's easy to discover at build > time, but it's fine to change int foo() { return 42; } to int foo() { > return -1; } ?
It's always a dilemma. We have to look at how likely we are to break applications and I don't think adding a conversion is likely to cause breakages. > > so Qt can know it and use it. For certain types we can do much better, > > > > because we can automatically convert some types. For example: > > QVector<char> -> QLinkedList<int> > > QVector<char> v; v.append(130); > QLinkedList<int> l = /*some"Sensible"AutomatedConversion*/(v); > > assert(l.first() == 130) ? "Depends" ? QVariant(char(130)).toInt() already exists. You may argue that it is not sensible but that's another issue. I guess the example is more between QVector<T1> -> QLinkedList<T2> when there exist a conversion from T1 to T2 > > > A conversion may be arbitrary. For example, most of the > > > conversions > > > > > > to QString. Should "bool(false) -> QString" return "False", "0", > > > "false"? > > > What about precision of, for example, "double -> QString" ? > > > > We use common sense on a case by case basic. > > I tend to believe the common sense in type conversion land is pretty > close to "avoid to do it automatically, prefer to make it explicit". > > Already now it's far too easy to make mistakes based on the "nice > and easy" QByteArray -> QVariant -> QString conversions when > accidentally writing QByteArrays into QSettings and reading QStrings > back. There shouldn't be more of that. What's the mistake here? Wrong encoding? Bad performances? When one use QVariant, it is because we want to enjoy dynamic typing and nice conversions. -- Olivier Woboq - Qt services and support - http://woboq.com - http://code.woboq.org _______________________________________________ Development mailing list Development@qt-project.org http://lists.qt-project.org/mailman/listinfo/development