为什么不能将 Q_OBJECT 与模板 类 一起使用?
Why is it not possible to use Q_OBJECT with template classes?
有一个类似的问题 here that was looking for a workaround and a nice guide here 描述了 Qt.But 中的元对象系统,但没有直接解释为什么不能在元中使用模板 class -object system.That 是一个恼人的限制。
有人知道为什么吗?
在标准 Qt 中是不可能的*,至于 Qt,至于这些 classes moc 需要能够预处理 class 并生成所需的元数据结构。这是在编译之前完成的,对于模板 class 这意味着类型还没有真正定义。
但是,有些事情是可能的:
- QObject 可以有模板方法,只要它们没有被标记为可调用、槽或信号。
- 您可以创建一个模板 class 来继承 QObject 派生的 class。它不能有一个 Q_OBJECT 宏或添加信号、槽或属性,但它可以是一个有用的技巧,例如创建一个模板化的通用 QAbstractItemModel。
- 您可以使用 Verdegris 而不是 moc。它使用基于模板的替代方法来生成与 moc 兼容的代码。这也应该允许模板化 QObjects。
*)当然没有什么是不可能的...如果一切都失败了,你也可以自己实现moc提供的一切...
有一个类似的问题 here that was looking for a workaround and a nice guide here 描述了 Qt.But 中的元对象系统,但没有直接解释为什么不能在元中使用模板 class -object system.That 是一个恼人的限制。
有人知道为什么吗?
在标准 Qt 中是不可能的*,至于 Qt,至于这些 classes moc 需要能够预处理 class 并生成所需的元数据结构。这是在编译之前完成的,对于模板 class 这意味着类型还没有真正定义。
但是,有些事情是可能的:
- QObject 可以有模板方法,只要它们没有被标记为可调用、槽或信号。
- 您可以创建一个模板 class 来继承 QObject 派生的 class。它不能有一个 Q_OBJECT 宏或添加信号、槽或属性,但它可以是一个有用的技巧,例如创建一个模板化的通用 QAbstractItemModel。
- 您可以使用 Verdegris 而不是 moc。它使用基于模板的替代方法来生成与 moc 兼容的代码。这也应该允许模板化 QObjects。
*)当然没有什么是不可能的...如果一切都失败了,你也可以自己实现moc提供的一切...