[Development] Oslo, we have a problem</apollo 13> [char8_t]
Edward Welbourne
edward.welbourne at qt.io
Mon Jul 8 11:34:31 CEST 2019
Arnaud Clere (8 July 2019 09:46) wrote
> Instead of asking users to choose correct QByteArray methods depending
> on the data it contains, why not proposing them to explicitly say what
> it contains?
>
> //! Explicitely utf8 encoded byte array
> class QUtf8String : public QByteArray
> {
> public:
> using QByteArray::QByteArray;
> QUtf8String(const QByteArray &o) : QByteArray(o) {}
> QUtf8String() : QByteArray() {}
> };
>
> Such QUtf8String can be used everywhere a QByteArray is.
> Qt implementors can fix QByteArray toUpper(), split(), etc. without
> having to guess what to do. Users only have to specify where they use
> utf8 to make sure they use the correct functions. Having a COW
> QUtf8String providing a migration path from ambiguous QByteArray seems
> in line with the addition of char8_t and u8* to C++ standard.
We could then move the string-ish methods to these derived string
classes, deprecating the QByteArray base versions (and not making them
virtual) in favour of using the right 8-bit string type. (The base's
implementation could indeed use that of a derived string class.)
That would glitch the "use anywhere QByteArray is asked for", of
course (you'd get the base's version of these methods), but anything
that accepts a QByteArray and does string-ish things to it is flawed
anyway. It should be deprecated in favour of a templated API taking a
string-type.
Eddy.
More information about the Development
mailing list