[Development] templated QObjects [was: Re: We are planning to upgrade qdoc to use clang for parsing C++]

Thiago Macieira thiago.macieira at intel.com
Wed Mar 2 20:28:07 CET 2016


On quarta-feira, 2 de março de 2016 19:24:15 PST Milian Wolff wrote:
> On Mittwoch, 2. März 2016 09:47:33 CET Thiago Macieira wrote:
> > On quarta-feira, 2 de março de 2016 16:48:08 PST Milian Wolff wrote:
> > > A simple solution would then be a macro for an explicit instantiation,
> > > similar  to what we already do with
> > > Q_DECLARE_LOGGING_CATEGORY/Q_LOGGING_CATEGORY. Only there then would moc
> > > generate the static meta object. That should work, no?
> > 
> > That is the case I mentioned before: the template class's author needs to
> > know each and every possible instantiation ahead of time and instantiate
> > them. Unlikely to be acceptable use-case.
> 
> For the use-case I have in mind, i.e. templated models, it would just fine.
> Note that I did not propose to have the macro for the instantiation where
> the template gets defined. Rather, I imagine users of the template to do
> that on demand.

That's not the case above. I was talking about pre-populating every possible 
instantiation.

If the users do it on demand, then we have the runtime merging problem on 
Windows.

Pick your poison.

> It's like QMetaType, no? We can, optionally, supply a set of instantiations
> for common types in the library. All others will be done by the user on-
> demand. If he then triggers an ODR violation, he can solve it by sharing the
> common code.

No, it isn't. QMetaType doesn't compare pointers. QMetaType assumes that ODR 
wasn't violated.

The meta objects will violate ODR.
-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center




More information about the Development mailing list