通常我像这样在 Qt 元系统中注册我的类:qRegisterMetaType<Foo>();
然而,我注意到有些人写 qRegisterMetaType<Foo*>();
这是等价的吗?或者如果我想将指针与 Foo
一起使用,我是否必须同时执行这两项操作? ?
那么这有什么意义吗?
qRegisterMetaType<Foo>();
qRegisterMetaType<Foo *>();
由 How to properly use qRegisterMetaType on a class derived from QObject? 部分回答, 但不完全
-- 编辑:到目前为止有趣的答案,谢谢 --
好的,关于到目前为止所说的,我得出了以下结论:我想将我的类同时用作指针和值,所以我将两者都注册了。代码编译。
我的类(class)是这样的:
class Foo1 : public Bar {}
class Foo2 : public Bar {}
当我只注册类型时,一切正常:
qRegisterMetaType<Foo1>();
qRegisterMetaType<Foo2>();
但是当我注册时:
qRegisterMetaType<Foo1*>();
qRegisterMetaType<Foo2*>();
代码编译,但在运行时我得到:
QMetaType:registerTypedef: Binary compatibility break -- Type name Bar* previously registered as typedef of Foo1 [1234], now registering as typedef of Foo2 [1235]
所以注册为指针似乎做了一些不同的事情。在我的特殊情况下,我无法同时注册。
最佳答案
不,它们不等价。 Foo
和 Foo*
是不同的类型,需要分别注册。如果你只想用元类型系统存储指向 Foo 的指针,那么使用 qRegisterMetaType<Foo *>();
.如果两者都需要,请同时注册。
通常,如果您的类无法被复制,您只会注册指针形式,例如 QObject
的情况。和衍生品,但这取决于您的要求。
关于c++ - qRegisterMetaType - 类、类*或两者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379355/