Re: [討論] 念完資工之後...
※ 引述《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)
推
01/05 09:06, , 1F
01/05 09:06, 1F
→
01/05 09:07, , 2F
01/05 09:07, 2F
討論串 (同標題文章)
CSSE 近期熱門文章
PTT數位生活區 即時熱門文章