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

时间:2016-03-04 21:58:14

标签: c++ qt

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

1 个答案:

答案 0 :(得分:2)

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

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

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