问题描述
有很多出色的答案,一个人如何以C的方式模拟面向对象的概念:
- c双链接列表带有抽象数据类型 /li>
- c作为对象的语言
- 您能否在C?
使用此类仿真并且不使用本地支持对象方面的技术吗?
高度相关:
- 为什么人为地将您的代码人为地限制为C?
- 推荐答案
我会给你一个我知道的原因,因为我就是这样:
当您为唯一平台开发软件时,唯一可用的编译器是C编译器.这在嵌入式微控制器的世界中经常发生.
其他推荐答案
只给您另一个示例:相当多的X86 Linux内核正在使用C,就好像是C ++一样,当对象 - 取向似乎是自然的时(例如,在VFS中).内核用汇编和c编写(如果在3.0内核中没有更改).内核编码器创建宏和结构,有时甚至命名类似于C ++项(例如,for_each_xxx),使它们可以编码为if.正如其他人指出的那样,如果您启动了一个面向对象的程序,则永远不会选择C;但是,当您调整基于C的代码以添加面向对象的功能时,您可能会.
其他推荐答案
当您想要面向对象的API的跨平台基础时.一个很好的例子是苹果的核心基金会.完全是C,可以轻松移植,但提供了一套非常丰富的不透明对象.
它的灵活性的一个很好的例子是,其许多类型的方式是与Foundation(一组真正的OO Objective-C库)"免费"桥接的方式.核心基础的许多类型可以自然地在基础API中使用,反之亦然.很难看到这种效果很好,而没有在核心基础库中存在一些OO概念.