C++类对象反射机制的实现(动态创建类对像并给类的字段赋值)

1.类的动态创建
要创建的类要继承一个相同的父类,才能用父类指针创建出相对应的子类

class QObject
{
   
   
	public:
	QObject(){
   
   }
	~QObject(){
   
   }
}

1.2.把类名称,类的字符名称,类的字段数据类型都要注册到对应的链表中
以后从链表中查找对应的类信息

1.2.1.在要创建的子类添加创建对象的声明宏

#define REGISTER_CLASS_NAME()//注册类信息
public:
static QObject* CreateQObject();

在类外实现

//注册类字段名称和字段数据类型
#define BEGIN_REGISTER_FILEDS_NAME(class_name)\
Qobject* class_name::CreateQObject(){
     
     return new class_name;}\
//在这new一个类对象出来

1.2.2 注册字段信息

首行要有保存字段信息的结构体

struct FieldNode
{
   
   
	TCHAR name[20];//字段名称
	TCHAR TypeName[20];//字段数据类型名称
	size_t TypeHashCode;//数据类型的哈希值,用来比较数据类型是否是同一种类型
	size_t filedOffs;	//字段名的偏移量
}

我们只要拿到类的这个结构就能对字段赋值和获得字段的值
所以要在类中注册的时候添加获得字段信息结构的函数.

#define REGISTER_CLASS_NAME()//注册类信息
public:
static QObject* CreateQObject();
static const FieldNode* GetFieldArray(); //获得类字段信息结构数组的地址

类外对应的实现添加

#define BEGIN_REGISTER_FILEDS_NAME(class_name)\
Qobject* class_name::CreateQObject(){
     
     return new class_name;}\
const FieldNode* class_name::GetFieldArray(){
     
     \
static const FieldNode class_name##FieldNode[]={
     
     \

//在实现函数中添加一个静态的字段信息结构数组class_name##FieldNode
//最后在数组中添加类的字段名称和字段类型就ok
//就要MFC添加消息和消息响应函数的宏一个道理

//结束宏
#define END_REGISTER_FILEDS_NAME()\
{
     
     0,0,0,0}}; return &class_name##FieldNode[0];}
//在最后要添加一个全是0的字段结构信息,用来判断是否到数组尾
//并返回数组的首地址
//因为这个宏中的类名称不能识别,所以要在前面重新定义一个别名
typedef class_name thisClass;
//添加到类结构数组前
//前面开始宏修改如下:

#define BEGIN_REGISTER_FILEDS_NAME(class_name)\
Qobject* class_name::Creat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值