gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:21:22 24 4
gpt4 key购买 nike

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

有人知道为什么吗?

最佳答案

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

但是,有些事情可能的:

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

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

关于c++ - 为什么不能将 Q_OBJECT 与模板类一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63020840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com