zhonghua

C++博客 首页 新随笔 联系 聚合 管理
  72 Posts :: 1 Stories :: 4 Comments :: 0 Trackbacks

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


所以,当你试图这么写:

  1. Q_DECLARE_METATYPE(QMap<QString, bool>);  

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


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


  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 
posted on 2012-03-30 13:13 米米 阅读(1295) 评论(0)  编辑 收藏 引用 所属分类: qt

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理