1

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

有谁知道为什么?

4

1 回答 1

4

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

但是,有些事情可能的:

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

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

于 2020-07-21T19:37:19.390 回答