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

Nikos Chantziaras realnc at gmail.com
Sat Jul 27 02:35:03 CEST 2019


On 25/07/2019 06:20, Thiago Macieira wrote:
> On Wednesday, 24 July 2019 09:05:02 PDT Nikos Chantziaras wrote:
>> On 24/07/2019 17:23, Thiago Macieira wrote:
>>> On Tuesday, 23 July 2019 07:27:27 PDT Nikos Chantziaras wrote:
>>>> Ugh. Having the call happen on every object creation sounds even uglier.
>>>> It seems it's best to roll our own. Probably a lazily initialized global
>>>> static object that you can add functors to before main() and then run
>>>> all functors of that object in main().
>>>
>>> Use qMetaTypeId<Type>(). That will include an inline check (runtime, sure)
>>> whether it's already been registered.
>>
>> That is a good solution for instantiable types, but for enums (my actual
>> use case) you can't do that.
> 
> Why not? Did you forget the Q_DECLARE_METATYPE?

I didn't (although I use Q_ENUM, but it does the same job.) But there's 
no constructor to put qRegisterMetaType() in. It's an enum. There's no 
constructor. Some enums are in a namespace, some are in a class, but 
even with an enum that is in a class, users of can just use the enum in 
their own signals/slots prior to instantiating the class that declares 
the enum. It will stay unregistered until the first instance of the 
class is created.


More information about the Interest mailing list