[Development] QList

Thiago Macieira thiago.macieira at intel.com
Fri Mar 24 20:55:43 CET 2017


Em sexta-feira, 24 de março de 2017, às 09:18:05 PDT, Marc Mutz escreveu:
> > Are you of the opinion that private inheritance has no purpose and should
> > never be used?
> 
> No, and if you look at code I have written over the years, you will see that
> I do use it.
> 
> One thing I've looked into in the past is this: Q6Polygon should inherit a
> Q6VectorBase<QPoint> that also Q6Vector<QPoint> inherits. This will allow
> easy specialisation of QVector<T*> by inheriting QBasicVector<const void*>.

Can you elaborate on your thinking? What's QBasicVector and what's QVector?

In my tree, I have QVector deriving from QGenericArray only because at the 
time we were considering doing QList<T> still be a pointer array if 
sizeof(T) > 32.

> I can even think of a similar pattern for QStringView/QLatin1(String|
> View)/QUtf8(String|View), though I guess that just enable_if'ing functions
> out of the primate template will do the job just fine, so the three classes
> would be mere typedefs of the template.
> 
> But in these cases, we're reusing next to 100% of the functionality, by way
> of lots of using Base::foo; This is not the case for QString : QStringView.
> They're completely unrelated, because one if owning and the other is non-
> owning.

I still disagree. Yes, there's a difference in ownership, but I don't see that 
as a deal-breaker. In fact, I see that as a plus: that's why we derive, to add 
functionality, like owning. And like I said, every QString is a view to itself 
and the pure inspection functions like indexOf() and contains() are exactly 
the same.

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center




More information about the Development mailing list