[Development] Allowed C++11 features [was: Re: Re: MSVC2012 in CI]
Sean Harmer
sean.harmer at kdab.com
Mon Mar 21 13:18:18 CET 2016
On Monday 21 March 2016 12:44:34 Marc Mutz wrote:
> On Monday 21 March 2016 12:07:24 Poenitz Andre wrote:
> > Marc Mutz <marc.mutz at kdab.com> wrote:
> > > I said then and I repeat it now that imho template aliases are not
> > > interesting for library development. In particular, I don't think
> > > something like
> > >
> > > > > > template<typename T>
> > > > > > using QNodeCreatedChangePtr =
> > > > > > QSharedPointer<QNodeCreatedChange<T>>;
> > >
> > > should be part of an API of a library. We have auto to avoid having to
> > > type this type. The typedefs just hide the (essential) fact that this is
> > > a shared pointer type.
> >
> > Do I understand correctly that you argue that the fact that the actual
> > type is a shared pointer is so important that it shall not be hidden by
> > a template alias whereas it would be completely fine to hide everything
> > related to type by using auto?
>
> Yes, you understood me correctly.
>
> And to answer your implied objection, too:
>
> No, there's no contradiction, because auto is for use in implementations and
> I was talking explicitly about APIs (which implies API documentation, too).
> It's one thing to write
>
> auto o = factory->create();
>
> and quite another to have
>
> QNodeCreatedChangePtr<Foo> create() [virtual]
>
> (to make up a plausible, but nonsensical example) in the docs.
I'm actually after the implementation case here so I can write:
auto creationChange = QNodeCreatedChangePtr<QEntityData>::create(this);
rather than:
auto creationChange = QSharedPointer<QNodeCreatedChange<QEntityData>
>::create(this);
Of course it would also be a convenience to the user when they need to do
similar. I guess I'll redo my changes if I can't use template aliases like
this unconditionally.
Cheers,
Sean
More information about the Development
mailing list