VC++在結構體中加入CArray類型,CMap

定義結構體(必須以類的方式,添加構造函數)

//數據類型信息
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);
---------



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章