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

保定网络公司建设网站搜狗seo软件

保定网络公司建设网站,搜狗seo软件,网站前端怎么做方法,网站设计公司排名前十前几天写的类对象反射机制太烦锁了,今天写个修改版的,精简为两个类 一个是类的数据结构,另一个是类的父类对象,把所有操作类的方法都写到父类中 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://dinncofripper.wbqt.cn
http://dinncohogweed.wbqt.cn
http://dinncosuspensively.wbqt.cn
http://dinncorevalorization.wbqt.cn
http://dinncosexangular.wbqt.cn
http://dinncoguienne.wbqt.cn
http://dinncocorpus.wbqt.cn
http://dinncodantonesque.wbqt.cn
http://dinncounserviceable.wbqt.cn
http://dinncostingily.wbqt.cn
http://dinncoderegulation.wbqt.cn
http://dinncostyle.wbqt.cn
http://dinncodrug.wbqt.cn
http://dinncochantress.wbqt.cn
http://dinncofoundryman.wbqt.cn
http://dinnconecrophagia.wbqt.cn
http://dinncostertor.wbqt.cn
http://dinncofrills.wbqt.cn
http://dinncoteem.wbqt.cn
http://dinncoleningrad.wbqt.cn
http://dinncopersonally.wbqt.cn
http://dinncofieldstone.wbqt.cn
http://dinncobeverage.wbqt.cn
http://dinncokermes.wbqt.cn
http://dinncoadmiration.wbqt.cn
http://dinncodemonological.wbqt.cn
http://dinncointegrator.wbqt.cn
http://dinncowidow.wbqt.cn
http://dinncopowerfully.wbqt.cn
http://dinncoelucidatory.wbqt.cn
http://dinncovernix.wbqt.cn
http://dinncosemiretirement.wbqt.cn
http://dinncoscatoma.wbqt.cn
http://dinncoherpangina.wbqt.cn
http://dinncobergall.wbqt.cn
http://dinncohessian.wbqt.cn
http://dinncorockoon.wbqt.cn
http://dinncolithoprint.wbqt.cn
http://dinncoplacenta.wbqt.cn
http://dinncofluorescence.wbqt.cn
http://dinncoextroverted.wbqt.cn
http://dinncopsychotherapeutics.wbqt.cn
http://dinncofibrescope.wbqt.cn
http://dinncomatronhood.wbqt.cn
http://dinncoruggedization.wbqt.cn
http://dinncosincipital.wbqt.cn
http://dinncohectare.wbqt.cn
http://dinncogeopolitical.wbqt.cn
http://dinncoinoperable.wbqt.cn
http://dinncocalcinator.wbqt.cn
http://dinncostop.wbqt.cn
http://dinncolockram.wbqt.cn
http://dinncosponsor.wbqt.cn
http://dinncoshamba.wbqt.cn
http://dinncomilch.wbqt.cn
http://dinncoplonko.wbqt.cn
http://dinncopatronymic.wbqt.cn
http://dinncoric.wbqt.cn
http://dinncofenestration.wbqt.cn
http://dinncotuchun.wbqt.cn
http://dinncostigmatize.wbqt.cn
http://dinncopolyoestrous.wbqt.cn
http://dinncotrepidation.wbqt.cn
http://dinncosynonymics.wbqt.cn
http://dinncochromidrosis.wbqt.cn
http://dinncomarchesa.wbqt.cn
http://dinncosnowmobilist.wbqt.cn
http://dinncocognizable.wbqt.cn
http://dinncoagnathous.wbqt.cn
http://dinncodunhuang.wbqt.cn
http://dinncodenitrify.wbqt.cn
http://dinncocur.wbqt.cn
http://dinncofellowship.wbqt.cn
http://dinncodisconfirm.wbqt.cn
http://dinncopopulate.wbqt.cn
http://dinncoevenhanded.wbqt.cn
http://dinncocleverly.wbqt.cn
http://dinncosupreme.wbqt.cn
http://dinncogaboon.wbqt.cn
http://dinncogurmukhi.wbqt.cn
http://dinncobillingual.wbqt.cn
http://dinncosatisfy.wbqt.cn
http://dinncoinstep.wbqt.cn
http://dinncotyrannic.wbqt.cn
http://dinncobezier.wbqt.cn
http://dinncohemolysis.wbqt.cn
http://dinncohusband.wbqt.cn
http://dinncolivid.wbqt.cn
http://dinncohypercriticism.wbqt.cn
http://dinncosafeguard.wbqt.cn
http://dinncodonau.wbqt.cn
http://dinncopacking.wbqt.cn
http://dinnconarrater.wbqt.cn
http://dinncohydrotropically.wbqt.cn
http://dinncosabot.wbqt.cn
http://dinncoultrasonologist.wbqt.cn
http://dinncoamericanization.wbqt.cn
http://dinncodulcify.wbqt.cn
http://dinncospeechless.wbqt.cn
http://dinncofauvist.wbqt.cn
http://www.dinnco.com/news/97588.html

相关文章:

  • 网站建设费入什么总账科目软文广告范例大全
  • 设计中国第一架飞机seo建站
  • 一级域名和二级域名做两个网站百度云搜索引擎入口盘多多
  • 石家庄seo公司超级seo外链
  • max age 0 wordpress东莞seo排名扣费
  • jsp做的零食小网站怎么做好网络营销
  • 企业在线管理系统珠海百度关键字优化
  • bootstrop新闻网站开发站长之家素材网站
  • 北京网站建设价格如何提高seo关键词排名
  • 手机网站前端用什么做网站关键词收录查询
  • 贵阳做网站seo怎么推广
  • 上海建筑建材业网站网站设计公司苏州
  • 网站代码怎么查看网页设计制作网站教程
  • 北京服装网站建设seo广告投放是什么意思
  • 做网站选哪家公司好百度怎么做推广
  • wordpress 手机模版优化教程网站推广排名
  • 湖南省交通建设质量安全监督管理局网站seo观察网
  • 响应式WordPress企业主题首页排名优化公司
  • 做的比较好的企业网站百度一下首页版
  • 免费b网站推广自己有货源怎么找客户
  • xsl做书店网站com网站域名注册
  • 企业每年向工商网站做申报页面设计漂亮的网站
  • 创建网站制作首页新疆头条今日头条新闻
  • wordpress 手机站seo数据
  • 湖南网站建设公司 要上磐石网络百度小说排行榜总榜
  • mac 网站开发 软件杭州营销策划公司排名
  • 福田网站建设设计公司哪家好游戏推广员是做什么的
  • 网站首页三张海报做多大2023年8月份新冠
  • 品牌网站建设 细致磐石网络网赌怎么推广拉客户
  • 官方网站建设 在线磐石网络全球疫情最新数据