VC++在结构体中加入CArray类型,CMap

来源:互联网 发布:好看的漫画推荐 知乎 编辑:程序博客网 时间:2024/06/05 20:20

定义结构体(必须以类的方式,添加构造函数)

//数据类型信息struct TableField{    int source;//表示该字段的来源,0表示其他表(如SystemDevice),1表示本表(如SeaWave)    CString tableName;    CString field;    CString alias;}; struct DataTypeInfo{CString Table;//表名CString TableAlias;//表别名CString DeviceIDField;//设备表的DeviceID字段对应表的字段,(潮位和生态浮标两个表不一致)CString TimeField;CArray<TableField,TableField> FieldAlis;//这里不能添加,放在CMap中会出错???//CArray这个类没有提供拷贝函数,需要将DataTypeInfo定义成类,并完成相应的赋值与拷贝操作//默认构造函数不能少DataTypeInfo(){}//第二个构造函数DataTypeInfo(const DataTypeInfo& ca){for(int i=0;i<ca.FieldAlis.GetSize();++i)FieldAlis.Add(ca.FieldAlis.GetAt(i));}DataTypeInfo& operator=(const DataTypeInfo& ca){if(&ca==this)return *this;Table=ca.Table;TableAlias=ca.TableAlias;DeviceIDField=ca.DeviceIDField;TimeField=ca.TimeField;FieldAlis.RemoveAll();for(int i=0;i<ca.FieldAlis.GetSize();++i)FieldAlis.Add(ca.FieldAlis.GetAt(i));return *this;}};

定义一个CMap引用定义的结构体

protected://采用CArray和Struct方式CMap<CString,LPCTSTR,DataTypeInfo,DataTypeInfo&> dataTypeInfo;//数据类型,表名,别名,对应的字段。第四个参数以&的方式,传地址
添加数据

TableField tableField;//////////////////////////////////////////////////////////////////////////// 潮位DataTypeInfo sttInfoTide;//主要这个不可共用,因此安装地址传递的sttInfoTide.Table="DataReceive";sttInfoTide.TableAlias="潮位";sttInfoTide.DeviceIDField="PhoneNo";sttInfoTide.TimeField="DT";//来源-设备表tableField.source=0;tableField.tableName="SystemDevice";tableField.field="DeviceID";tableField.alias="设备ID";fieldAliasTide.Add(tableField);sttInfoTide.FieldAlis.Add(tableField);tableField.field="Location";tableField.alias="安装位置";fieldAliasTide.Add(tableField);sttInfoTide.FieldAlis.Add(tableField);。。。。。。。。。。    //添加到CMap中    dataTypeInfo.SetAt("TIDE",sttInfoTide);//测试,引出    DataTypeInfo tt;    dataTypeInfo.Lookup("TIDE",tt);
---------



原创粉丝点击