[Development] Changing qreal to a float
Marc Mutz
marc.mutz at kdab.com
Tue Feb 21 09:59:49 CET 2012
On Tuesday February 21 2012, Thiago Macieira wrote:
> On terça-feira, 21 de fevereiro de 2012 08.24.52, Samuel Rødal wrote:
> > Also, I guess we'll want convenience functions "QRectD QRectF::toRectD()
> > const" etc. Can that be done with the typedefs proposed above, or does
> > it require having "QRectD QRectD::toRectD() const" as well?
>
> With some template magic it can be done.
That simply being full template specialisation? That'd duplicate quite some
code, though, yes.
> If you write:
> template <class t> class QBasicRect;
> typedef QBasicRect<float> QRectF;
> typedef QBasicRect<double> QRectD;
>
> Then you can't specialise QBasicRect<float or double> anymore. You can only
> use the default expansion or partial specialisations that are yet to be
> written. That means it's easier to add an "constexpr inline QRectD
> toRectD() const;" to all classes than to just the float and integer ones.
>
> But someone really motivated can add more magic using QEnableIf.
Specialising toRectD() to not appear in QRectD would force the same
specialisation on generic code. So my feeling is that if there's a
QBasicRect<>, then it should contain
QBasicRect<T> toBasicRect<T>() const
and convenience functions for all the existing typedefs.
A tangential question: should QRect be QBasicRect<int> (in which case it would
probably have a class invariant of right()-left()==width() instead of
width()-1 as now. If there is a plan to move to CRect semantics (not sure I'd
like that), then keeping QRect and using QRectI = QBasicRect<int> could do
the trick.
Thanks,
Marc
--
Marc Mutz <marc.mutz at kdab.com> | Senior Software Engineer
KDAB (Deutschland) GmbH & Co.KG, a KDAB Group Company
www.kdab.com || Germany +49-30-521325470 || Sweden (HQ) +46-563-540090
KDAB - Qt Experts - Platform-Independent Software Solutions
More information about the Development
mailing list