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

最低0.47元/天 解锁文章
8789

被折叠的 条评论
为什么被折叠?



