【发布时间】:2019-09-30 20:18:19
【问题描述】:
QT Q_PROPERTY 宏是如何工作的?
Q_PROPERTY:
Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged)
我需要创建一个类似于 Q_PROPERTY 的宏。我的目标是将类的属性存储在向量中
例如我有一个 Person 类
Person {
private:
std::string name;
std::string lastname;
public:
std::string name();
void set_name(std::string name);
}
我想在我的班级中做一些类似 Q_PROPERTY 的操作来存储向量中的字段如何被称为 getter、setter 以及属性的类型和名称
例如从宏接收此数据:
类型 姓名 读 写
如果我有一个宏:
#define PROPERTY(...)
PROPERTY(std::string name READ name WRITE set_name)
PROPERTY(std::string email READ email WRITE set_email)
我如何从 VA_ARGS 中提取元素,例如:
__VA_ARGS__['TYPE'] this should write std::string
__VA_ARGS__['NAME'] this should write name
__VA_ARGS__['READ'] this should write name
__VA_ARGS__['WRITE']this should write set_name
有了这些数据,我想写一个结构把它保存在一个向量中
并将所有类映射为模拟某种反射。
【问题讨论】:
-
__VA_ARGS__只是将捕获的所有参数转发到可变参数宏中使用它的任何位置。所以:#define M(...) f(__VA_ARGS__)意味着M(foo, bar)将扩展为f(foo, bar)。