1
5
无论如何,在C++中,当c++代码被翻译成C时,cfAdvor使用它来做它,但是你需要很有纪律性并且手动完成所有的繁琐工作。 必须使用执行构造函数工作的函数初始化“类”。这包括为虚拟函数初始化指向多态函数指针表的指针。虚拟函数调用必须通过vtbl函数指针进行(它将指向函数指针的结构-每个虚拟函数一个)。 每个派生cals的虚函数结构需要是基类的一个超级集合。 这方面的一些机制可能是使用宏隐藏/辅助的。 Miro Samek的第一版 "Practical Statecharts in C/C++" 有一个附录A——“C+面向对象的C语言编程”,它有这样的宏。看起来这是从第二版中删除的。可能是因为麻烦太多了。只要使用C++,如果你想这样做… 你也应该阅读 Lippman's "Inside the C++ Object Model" 这涉及到C++如何在幕后工作,这通常是关于如何在C.工作的小片段。 我想我知道你在找什么了。也许吧。 像这样的东西如何工作:
如果没有语言支持,你就不能这么简单地做到这一点——你需要手动做一些事情(这就是没有语言支持的意思):
|
2
5
基本上,结构中的结构。
当你想的时候,比如说
如果您想访问
虚函数通常使用一个特殊的函数指针表来完成,该表是每个对象的一部分,是一种基本类型的“我的类型”记录。 |
3
2
下面是COM如何处理C语言。我有点生疏,但本质就是这样。每个“类”成员变量只是一个结构。
所有的方法,实际上只是普通的函数。这样地
然后,他们使用预处理器“欺骗”C代码以显示类似的内容。
唉,我不知道用什么样的预处理器技巧来让C++看起来函数调用分解成一个计划香草C调用。 DirectX COM对象以这种方式声明。 |
4
1
Dobb博士就这个问题发表了一篇相当详细的文章, Single Inheritance Classes in C. |
5
1
结构中的结构是常见的,但它使访问继承字段变得困难。您要么需要使用间接(例如
我看到的另一种选择更像这样:
这使类型可以直接访问继承字段。结果对象仍然可以安全地强制转换为父类型,因为父类型的字段和继承的字段在同一位置开始。 宏可以稍微改进语法。我在旧的POV瑞源中看到了这一点(但我认为它们已经转换成C++)了。 |
6
0
如果你想要一个关于这些东西如何工作的好的参考资料,请看一下glib/gdk/gtk开放源码库。它们有相当好的文档,并且整个框架是基于C OO的。 |
7
0
您可以通过编写构造函数、setter、getter和析构函数来模拟对象,并显式调用隐藏的该指针。 继承是通过让派生对象包含指向派生对象结构中基对象的指针来处理的。 |
r.avv85 · git日志只列出来自gerrit的合并更改 7 年前 |
Jens Törnell · Vue路由器,删除某些页面上的哈希 7 年前 |
FabianS · 如何从Redmine插件添加历史项目(通过按钮/链接) 10 年前 |