作者semop (semop)
看板CSSE
标题Re: [讨论] 念完资工之後...
时间Fri Jan 5 02:27:09 2007
※ 引述《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)
1F:推 nvfp:图书馆里较久之前的书里确实有看过这些, 不过老实说... 01/05 09:06
2F:→ nvfp:我看了头好痛 囧" 01/05 09:07