定義結構體(必須以類的方式,添加構造函數)
//數據類型信息
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);
---------