Q_DECLARE_METATYPE 的一个坑(有时候会现诡异编译错误)

Q_DECLARE_METATYPE 的一个坑(有时候会现诡异编译错误)

因为 Q_DECLARE_METATYPE 是一个宏。借用一句话:“宏是万恶之源”。什么恶呢?就是,如果它的参数当中有逗号",",会被当成参数分隔符。


所以,当你试图这么写:

[cpp] view plain copy
  1. Q_DECLARE_METATYPE(QMap<QString, bool>);  

你就会发现编译不过,并且抓狂了。


解决方法嘛,当然很简单:参照Q_DECLARE_METATYPE的宏定义,自己把它展开,编译器就不会再犯傻了。


[cpp] view plain copy
  1. QT_BEGIN_NAMESPACE  
  2. template <>  
  3. struct QMetaTypeId< QMap<QString, bool> >  
  4. {  
  5.     enum { Defined = 1 };  
  6.     static int qt_metatype_id()  
  7.     {  
  8.         static QBasicAtomicInt metatype_id = Q_BASIC_ATOMIC_INITIALIZER(0);  
  9.         if (!metatype_id)  
  10.             metatype_id = qRegisterMetaType< QMap<QString, bool> >("QMap<QString, bool>",  
  11.                 reinterpret_cast< QMap<QString, bool> *>(quintptr(-1)));  
  12.         return metatype_id;  
  13.     }  
  14. };  
  15. QT_END_NAMESPACE 

你可能感兴趣的:(Q_DECLARE_METATYPE 的一个坑(有时候会现诡异编译错误))