元件的屬性含有reference參數時的讀寫問題 |
答題得分者是:jow
|
daldal
高階會員 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
請問各位前輩一個困擾多天問題
小弟在元件中宣告一個structure, TPoint Fp[20] 此時會有 TPoint 的reference,TPoint[].x、TPoint[].y 方法1:可以正常的使用p[].x, p[].y存取 [code cpp] __property TPoint* p = { read = Fp, write = Fp } [/code] 方法2:可以正常的使用px[], py[]存取 [code cpp] __property int px[int index] = { read = ReadFpX, write = WriteFpX } __property int py[int index] = { read = ReadFpY, write = WriteFpY } int ReadFpX(int Index) { return Fp[index].x; } void WriteFpX(int index, int value) { Fp[index].x = value; } [/code] 方法3:無法使用p[].x, p[].y, p[]"存", 可以"取" (存會之敗) [code cpp] __property TPoint p[int index] = { read = ReadFp, write = WriteFp } TPoint ReadFp(int Index) { return Fp[index]; } void WriteFp(int index, TPoint value) { Fp[index] = value; } [/code] 問題就在於 方法3,雖然可以compiler,但是只能讀取,無法寫入reference值 方法2,會造成sub-function一堆,維護成本過高(因為我自訂的my-struture比起TPoint複雜很多) 方法1,直接存取有風險(需要在Write/Read部分寫額外判斷) 不知哪位大俠能夠指點一下迷津 m(_ _)m 編輯記錄
daldal 重新編輯於 2008-03-24 17:48:25, 註解 錯字‧
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
以下只談個人看法, 沒有實作... (1) 方法一: [code cpp] __property TPoint* p = { read = Fp, write = Fp } [/code] 其實與直接存取TPoint Fp[20]是完全相同的, 應該可以正常存取陣列中的數值 只是以資料封裝的角度來看,程式碼應該寫成 [code cpp] __property TPoint* p = { read = Fp} [/code] 表示TPoint Fp[20]所配記憶體的位址,是唯讀的 試想以下的動作,會造成什麼結果? [code cpp] TYourClass *O = new TYourClass(); O->p = new TPoint[10]; [/code] 記憶體有可能會被重新配置了,或出現該記憶體位址 無法寫入的Exception(因沒有實作,無法確定實際狀況) (2) 方法二: [code cpp] __property int px[int index] = { read = ReadFpX, write = WriteFpX } __property int py[int index] = { read = ReadFpY, write = WriteFpY } [/code] 這是很正規的資料封裝的寫法... (3) 方法三: 建議寫成只存取單一 TPoint的指標 [code cpp] __property TPoint* p[int index] = { read = get_p, write = write_p } TPoint get_p(int Index) { return &Fp[index]; //傳回第Index筆TPoint的位址 } void WriteFp(int index, TPoint* value) { Fp[index] = *value; //將value內含值,指定給第index筆的 TPoint } [/code] 個人看法,僅供參考... |
daldal
高階會員 發表:6 回覆:102 積分:226 註冊:2007-06-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |