如何根据架构【自动】得到变量类型?
如何根据架构得到变量类型?
struct XXX:
{
long Level;
long Num;
char UserName[255];
}
XML文件:
...
<Level Name="Level" Type=Long></Level>
<Num Name="Num" Type=Long></Num>
<UserName Name="UserName" Type=String></UserName>
...
XML文件是自己生成的。我也可以这样写:
...
<xs:element name="UserName" type="xs:string" minOccurs="0" />
<xs:element name="Level" type="xs:int" minOccurs="0" />
...
其中name属性是表示对应struct中的哪个字段,type属性是字段的类型
但是我怎样写,还是需要依次手动对字段进行一一转换,
//xmlf代表从xml文件中读出来的值,这里举例xmlf.type代表UserName的type字段值
if (xmlf.type==string)
{strcpy(xxx.name,xmlf.name)}
else{
if(xmlf.type==int)
{整形转换为字符串类型}
else if(xmlf.type==datetime)
{日期转换为字符串}
...
//【这里要列举所有可能的类型
//然后转换为这个字段的实际类型(这里用UserName字段为例,转换xml中的值为struct中的char*类型)】
...
}
这样很不爽,
有没有自动的功能?就像C#的类的序列化一样,只需一个函数就可以从XML文件中取得所有字段的值到内存的struct中?目前用的是MSXML,也可以用别的实现。
问题点数:20、回复次数:4Top
1 楼ffb(项目急,顾不了结构的)回复于 2005-02-01 13:51:00 得分 0
这个需要up的!Top
2 楼ffb(项目急,顾不了结构的)回复于 2005-02-21 10:02:20 得分 0
upTop
3 楼shootingstars(有容乃大,无欲则刚)回复于 2005-02-21 12:57:38 得分 10
C++的类对象可以使用RTTI来获取对象的类的名称:
struct riittest
{
};
int _tmain(int argc, _TCHAR* argv[])
{
riittest a;
cout<<typeid(a).name()<<endl;
return 0;
}
但是int等基本的数据类型不能这么做。Top
4 楼shootingstars(有容乃大,无欲则刚)回复于 2005-02-21 13:02:07 得分 10
刚刚用vc7.1做了一下实验,int竟然也可以。。。难道是我记错了,还是VC7自己增加的功能?
int _tmain(int argc, _TCHAR* argv[])
{
int i;
cout<<typeid(i).name()<<endl;
return 0;
}Top




