gpt4 book ai didi

带复制和赋值的 C++ Qt 反射

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:40 28 4
gpt4 key购买 nike

作为the QObject documentation和许多其他人解释说,QObject 有一个标识,因此隐藏了它的复制构造函数和赋值运算符。

但是,我不是从 QObject 派生它的动态属性特性或信号/槽特性。我只想要反射,或者访问Foo::staticMetaObject的能力。

class Foo : public QObject {
Q_OBJECT
Q_ENUMS(Color)
public:
enum Color { Blue, Red, Pink };
private:
Color color;
};

Q_DECLARE_METATYPE(Foo::Color)

然后我就不能复制 Foo 了:

Foo a;
Foo b;
a = b;

在这种情况下允许复制和赋值的最佳方式是什么?我是否绝对需要编写复制构造函数和赋值运算符?他们会是什么样子?反射仍然有效吗?

最佳答案

如果你只对反射(reflection)感兴趣

  • 类名,
  • 枚举和标志(Q_ENUMS、Q_FLAGS),
  • 类(class)信息 ( Q_CLASSINFO ),

你可以使用Q_GADGET instead of Q_OBJECT :

class Foo {
Q_GADGET
Q_ENUMS(Color)
public:
enum Color { Blue, Red, Pink };
private:
Color color;
};

它将声明和定义 Foo::staticMetaObject

关于带复制和赋值的 C++ Qt 反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6798575/

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