精華區beta CSSE 關於我們 聯絡資訊
※ 引述《semop (semop)》之銘言: : 我不明白為什麼不可能實現,若好好運用 pointer 或 handle, C 跟 C++ 沒有 : 什麼太大的不同。 : : 推 ykjiang:有沒有不同,要舉實例比較好說明 01/05 01:58 可以參考我寫的那段 C subclassing 的程式碼,以下是比較簡明的對照。 class a { public: virtual int work(); }; class b: public a { public: int work(); }; b obj1; a obj2, *obj3 = &obj1; obj1.work(); obj2.work(); obj3->work(); 就可轉換為: struct _class; struct _class { struct _class* p; // superclass int (*work)(); // member function }; void new_obj(_class* obj, _class* cls) { obj->p = cls; obj->work = cls->work; } _class a = { null, class_a_work }; _class b = { &a, class_b_work }; _class obj1, obj2, *obj3 = &obj1; new_obj(&obj1, &b); new_obj(&obj2, &a); (*obj1.work)(); (*obj2.work)(); (*obj3->work)(); 並沒有什麼系統機制上的重大差異。 比較完整的實作,則是建立兩個 struct, 一個是 member data, 一個是 member function pointer. 建立 object 就是將兩者打包起來。這邊並沒有處理 member data 的部分。 關於 C++ 的動態機制用 C 實作的問題,這部分並不是問題, class 本來就只是 資料和程式碼用同一個名稱來存取,即使是多重繼承也早就被解決了。透過巨集 處理,可以做到相當漂亮的地步。 最麻煩的地方應該是 exception handling, 但也是有等價的結構。 相關的資料和實作在十幾年前就很多了,只是現在很少人知道。 -- ※ 編輯: semop 來自: 61.222.173.26 (01/05 02:47)
nvfp:圖書館裡較久之前的書裡確實有看過這些, 不過老實說... 01/05 09:06
nvfp:我看了頭好痛 囧" 01/05 09:07