在 QT 中声明模板类为元类型

Declaring a template class a metatype in QT

本文关键字:类型 QT 声明      更新时间:2023-10-16

我一直在尝试允许我自己的向量库成为 QT 中的元类型,通过他们教我的教程Q_DECLARE_METATYPE(class)。 但是我的类是一个模板。 我一直在搜索并发现了一个未记录的宏Q_DECLARE_METATYPE_TEMPLATE_1ARG(),但是我发现了一个错误报告,并且没有关于它是否已修复的反馈。 我试过使用它,但它仍然没有注册。 原因是在我的游戏引擎Shader类中,我存储制服并根据制服将值存储为QVariant。这就是我遇到问题的地方。有谁知道如何为QMetatypes注册模板?

Qt使用你在内部提到的宏,还有一个2参数版本。 QtCore/qmetatype.h显示了一些使用示例。 我不确定为什么它不能按预期为您工作,我需要查看您的代码以了解更多信息。

但是,有一种解决方法可以接受: 如果您知道将需要的所有可能的模板参数,则可以显式声明每个模板实例化为元类型。 例如,如果你的模板类被称为Foo<T>,并且你知道你只会使用Foo<int>Foo<float>, 您只需注册这些:

Q_DECLARE_METATYPE(Foo<int>)
Q_DECLARE_METATYPE(Foo<float>)