[Interest] [SPAM] Is it safe to call qRegisterMetaType() before main()?

Thiago Macieira thiago.macieira at intel.com
Tue Jul 23 03:53:39 CEST 2019


On Monday, 22 July 2019 16:15:05 PDT Hamish Moffatt wrote:
> On 22/7/19 10:56 pm, Nikos Chantziaras wrote:
> > In order to avoid calling qRegisterMetaType() in main() (with the
> > possibility of forgetting to do so,) I instead call it before the
> > program enters main(), in the implementation file of whoever is the
> > owner of the type. There's several ways to do this, I just use a lambda:
> > 
> > namespace {
> > char unused = [] {
> >     qRegisterMetaType<MyClass::MyEnum>();
> >     return 0;
> > }();
> > }
> > 
> > It "seems to work fine," but is this safe though?

Actually, yes, so long as you're not using static builds. The metatype system 
depends on only the base containers (QVector, QByteArray), so this should 
work.

Still, it's ugly. For classes, I recommend putting the registration in the 
constructor. An enum is a different story.

> Why not put them in a static function in each file, and use
> Q_COREAPP_STARTUP_FUNCTION to have Qt call it for you at the right time?

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel System Software Products





More information about the Interest mailing list