当前位置: 首页 > news >正文

wordpress 支持magnet安卓手机性能优化软件

wordpress 支持magnet,安卓手机性能优化软件,网络规划设计师教程电子版2023,移动端优质网页前几天写的类对象反射机制太烦锁了,今天写个修改版的,精简为两个类 一个是类的数据结构,另一个是类的父类对象,把所有操作类的方法都写到父类中 1.类的信息结构体 struct Field_Node {TCHAR m_name[20]; //字段名称TCHAR m_typeName[20]; // 字段类型名称size_t m_typeHashC…

前几天写的类对象反射机制太烦锁了,今天写个修改版的,精简为两个类
一个是类的数据结构,另一个是类的父类对象,把所有操作类的方法都写到父类中

1.类的信息结构体

struct Field_Node
{TCHAR m_name[20];		//字段名称TCHAR m_typeName[20];	// 字段类型名称size_t m_typeHashCode;	//字段数据类型的哈希值size_t m_typeOffs;		//字段偏移量
};

字段信息结构不再添加其他方法了,就只为保存字段信息数据

2.父类QObject

class QObject
{
public:QObject(){}virtual ~QObject(){}public://静态方法获取子类对象,直接New一个子类对象就好了template<typename T>static QObject* CreateObject(){retrun new T();}//纯虚函数获得子类的字段信息数组地址virtual const Field_Node* GetSubClassFieldNode()const=0;//设置类对象的字段数据template<typename T>void Set_Value(const TCHAR* strFieldName, const T& inValue){//调用子类的,获得其静态的字段信息数组地址const Field_Node* pField=GetSubClassFieldNode(); //循环查找字段名称并给其赋值while(pField->m_typeHashCode!=0){if(lstrcmp(pField->m_name,strFieldName)==0){if(pField->m_typeHashCode!=typeid(T).hash_code()){assert(false && "数据类型不匹配,检查字段数据类型和输入的数据类型是否一致!!!");return;}//设置字段的值*((T*)((unsigned char*)&stu+ pField->m_typeOffs))=inValue;return;}pField++;}//end while}//获得字段数据void Get_Value(const TCHAR* strFieldName, T& outValue){//调用子类的,获得其静态的字段信息数组地址const Field_Node* pField=GetSubClassFieldNode(); //循环查找字段名称并给其赋值while(pField->m_typeHashCode!=0){if(lstrcmp(pField->m_name,strFieldName)==0){if(pField->m_typeHashCode!=typeid(T).hash_code()){assert(false && "数据类型不匹配,检查字段数据类型和输入的数据类型是否一致!!!");return;}//获取字段的值outValue=*((T*)((unsigned char*)&stu+ pField->m_typeOffs));return;}pField++;}//end while}};

这样就能对子类对象的字段进行数据操作了

3.下面是类的注册宏,在其内就重写一个父类的虚函数就搞定了,

//类内声明宏
#define REGISTER_CLASS_NAME()\
public:\
const Field_Node* GetSubClassFieldNode()const//类外实现宏
#define BEGIN_REGISTER_FILEDS_NAME(class_name)\
const Field_Node* class_name::GetSubClassFieldNode()const{\
typedef class_name thisClass;\
static const Field_Node thisClass##Field_Node[]={\
//结束宏
#define END_REGISTER_FILEDS_NAME()\
{TEXT(""),TEXT(""),0,0}};return &thisClass##Field_Node[0];}//添加字段信息结构宏
#define ADD_FIELD_NAME(fName,fType)\
{TEXT(#fName),TEXT(#fType),typeid(fType).hash_code(),(size_t)&((thisClass*)0)->fName},\

//TEXT(#fName) 字段名称(变量的名称,name,sex)
//TEXT(#fType) 数据类型名称(int ,bool)
//(size_t)&((thisClass*)0)->fName 字段的偏移量
//typeid(fType).hash_code() 获得数据类型的哈希值,用来比较数据类型是否相同

4.用法就更加简单了,

class Student :public QOBject{
REGISTER_CLASS_NAME()
public:Student(){}~Student(){}
public:int id;CString name;CString sex;UINT age;
};BEGIN_REGISTER_FILEDS_NAME(Student)ADD_FIELD_NAME(id, int)ADD_FIELD_NAME(name, CString)ADD_FIELD_NAME(sex, CString)ADD_FIELD_NAME(age, UINT)
END_REGISTER_FILEDS_NAME()//测试函数中//通过父类的静态方法获取子类New的对象
//用父类指针来操作子类对象进行赋值,获取值等操作
QOject* pObj=QObject::CreateObject<Student>();//给对象赋值
pObj->Set_Value(TEXT("id"),123);
pObj->Set_Value(TEXT("name"),CString(TEXT("张三")));
pObj->Set_Value(TEXT("sex"),CString(TEXT("男")));
pObj->Set_Value(TEXT("id"),(UINT)33);//获取对象字段的值
Student s;
pObj->Get_Value(TEXT("id"),s.id);
pObj->Get_Value(TEXT("name"),s.name);
pObj->Get_Value(TEXT("sex"),s.sex);
pObj->Get_Value(TEXT("id"),s.age);//最后操作完可转化子类对象指针
Student *pStu=(Student*)pObj;

总结一下是不是比前面[写的简单多了,也容易弄懂,
其实关键是获取子类的结构信息,用纯虚函数就能调用子类的静态字段结构数组,
也就相对简单了,

http://www.yidumall.com/news/13382.html

相关文章:

  • 做二手货车网站商旅平台app下载
  • 公司网络维护外包价格青岛seo软件
  • DW做旅游网站模板网站怎么推广效果好一点呢
  • 电子商务网站建设与管理答案b整合营销方案案例
  • 帝国cms做中英文网站营销策划与运营
  • java做网站编程6网站排名优化手机
  • 国外html5游戏网站网站优化招商
  • 用dw做网站毕业设计优化设计六年级下册语文答案
  • 做网站建设公司赚钱吗线在科技成都网站推广公司
  • 网站建设详细设计关键词优化搜索排名
  • 网站建设桔子科技自媒体平台app
  • wordpress自动修改图seo自学网官方
  • 外包做的网站可以直接去收录吗关键词挖掘机爱站网
  • 网站的安全检查怎么做营销推广软文
  • 多网站怎么做seo产品营销软文
  • 化妆品购物网站排名软件外包企业排名
  • 北京市朝阳区社会建设工作办公网站推广注册app拿佣金
  • github wordpress主题旺道智能seo系统
  • 运营管理培训seo北京公司
  • 济源哪里做网站域名服务器查询
  • 服装企业网站建设策划书企业文化经典句子
  • 凡客做网站今天nba新闻最新消息
  • 做100个垂直网站推广形式有哪几种
  • 自己搭建服务器网站开发软件引擎搜索是什么意思
  • 网站首页代码怎么写宁波seo网络推广渠道介绍
  • reactjs 做的网站广州百度快速排名优化
  • c#网站开发视频教程 高清代发百度关键词排名
  • 网站优化怎么做 有什么技巧宁波seo公司网站推广
  • 自己做的网站为什么不显示图片网站页面分析
  • 网站建设的基础是什么意思seo是哪个英文的简写