繁体   English   中英

为什么不能将 Q_OBJECT 与模板类一起使用?

[英]Why is it not possible to use Q_OBJECT with template classes?

这里有一个类似的问题,正在寻找一种解决方法和一个很好的指南它描述了 Qt 中的元对象系统。但这并不能直接解释为什么不能在元对象系统中使用模板 class。这是一个令人讨厌的限制。

有谁知道为什么?

在标准 Qt 中是不可能的*,对于 Qt,因为这些类 moc 需要能够预处理 class 并生成所需的元数据结构。 这是在编译之前完成的,对于模板 class 来说,这意味着类型还没有真正定义。

但是,有些事情可能的:

  • QObject 可以有模板化的方法,只要它们没有被标记为可调用、槽或信号。
  • 您可以创建一个模板 class 继承 QObject 派生的 class。 它不能有 Q_OBJECT 宏或添加信号、槽或属性,但它可能是一个有用的技巧,例如创建模板化的通用 QAbstractItemModel。
  • 您可以使用 Verdegris 代替 moc。 它使用基于模板的替代 moc 来生成 moc 兼容的代码。 这也应该允许模板化的 QObjects。

*) 当然没有什么是不可能的......如果其他一切都失败了,你也可以实现 moc 提供的一切......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM