定义结构体(必须以类的方式,添加构造函数)
//数据类型信息
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);
---------