使用TStringList的AddObject後問題 |
尚未結案
|
santsai
一般會員 發表:1 回覆:2 積分:0 註冊:2006-09-27 發送簡訊給我 |
各位先進好,
小弟想實做了一個 Class去包裝TStringList, 因想利用其AddObject()等功能, 如附件 class THashedMap : public TStringList { private: ... public: void __fastcall Add(String id,TObjects *obj); ... } 假設我Add進去的是一個struct A *aaa, 把他轉型成TObject後就可以Add進去,取出後也可以強迫轉型成原來的struct A後來使用. 但是... 要delete這個TStringList時, 就只能在這個Class的外面取出Objects,轉型成 struct A 後才能將TStringList delete. 請問有辦法在Class裡面紀錄當初Add的型態是哪一個型態, 在Delete 時就可以取出記錄的型態資料, 然後自己轉型後再Delete? 查過使用typeInfo, classid等...最後還是不知道怎麼樣來寫. 編輯記錄
santsai 重新編輯於 2007-08-09 15:52:57, 註解 無‧
|
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
|
santsai
一般會員 發表:1 回覆:2 積分:0 註冊:2006-09-27 發送簡訊給我 |
===================引 用 Stallion 文 章=================== 你應該繼承 TList 比較好寫。 一般來講串列連結儲存的資料都是一致的,如果你要儲存不同的資料型態,繼承 TList 然後在成員中加上一個 TStringList 來儲存每一個資料的型態。 當然你分開來寫也可以,只不過違反類別的精神,而且程式碼不好維護。 ===== 謝謝,可是主要是要用到TStringList排序的功能, 不過您說的也不失一個方向.. 再請問, 您說用一個TStringList儲存不同的資料型態, 是儲存資料型態的Name? 儲存之後如何用型態名稱去強迫型別轉換回原來的物件? 因為用TList存不是都要轉成TObject?該如何再轉回來呢? |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
嗯~你應該用TypeId(物件變數).Name()來儲存資訊,事後解開TList中的Items[index]裡面資料時,以相對註標中TStringList的儲存資訊作為轉型的依據。想想工程蠻大的!
希望其他網友或版大們有更好的方法。 ===================引 用 santsai 文 章=================== ===================引 用 Stallion 文 章=================== 你應該繼承 TList 比較好寫。 一般來講串列連結儲存的資料都是一致的,如果你要儲存不同的資料型態,繼承 TList 然後在成員中加上一個 TStringList 來儲存每一個資料的型態。 當然你分開來寫也可以,只不過違反類別的精神,而且程式碼不好維護。 ===== 謝謝,可是主要是要用到TStringList排序的功能, 不過您說的也不失一個方向.. 再請問, 您說用一個TStringList儲存不同的資料型態, 是儲存資料型態的Name? 儲存之後如何用型態名稱去強迫型別轉換回原來的物件? 因為用TList存不是都要轉成TObject?該如何再轉回來呢? |
santsai
一般會員 發表:1 回覆:2 積分:0 註冊:2006-09-27 發送簡訊給我 |
===================引 用 Stallion 文 章=================== 嗯~你應該用TypeId(物件變數).Name()來儲存資訊,事後解開TList中的Items[index]裡面資料時,以相對註標中TStringList的儲存資訊作為轉型的依據。想想工程蠻大的! 希望其他網友或版大們有更好的方法。 ===================引 用 santsai 文 章=================== 謝謝. 但是我想問的就是後面的這個問題, 假如我已經知道某個TObject 的型態是 某個名稱(字串)"TClassXXX" , 我怎麼把TObject轉型成真正的TClassXXX. 可以有類似像下面這段 Code的用法嗎? String CName="TClassXXX"; TClassXXX *A = (CName) Objects[i]; //CName是個變數. |
Stallion
版主 發表:52 回覆:1600 積分:1995 註冊:2004-09-15 發送簡訊給我 |
參考一下這裡,有點複雜喔!
http://www.dev.idv.tw/mediawiki/index.php/BCB中的RTTI機制 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |