0

在查看某人的代码时,我被一种表示数据的方式所震惊,在 C 上下文中,这对我来说似乎很奇怪:

这个人需要为光线追踪器表示不同类型的几何图形,每个几何图形虽然不同,但在结构上却有相似之处。所以这个人决定通过指针链接在一起的或多或少的抽象结构来表示几何。

s_entities -> s_scene_object -> s_sphere
s_entities -> s_scene_object -> s_plane
s_entities -> s_pointlight

我想知道为什么人们会通过抽象层在 C 中分解其数据,而不是为每种数据提供一个包罗万象的结构。

一种解释是,如果您的函数在数据的某个抽象层上运行,则可以减少开销。正确的 ?

在我看来,这就像 OOP 习惯的残余。

4

1 回答 1

2

你说“OOP 习惯的残余”,好像这在 C 中显然是不合适的。我会说你错了,C 中有相当大的非常面向对象的代码集合。它有效。

面向对象是一种安排和建模事物的方式,它与编程语言无关。C 足够低级,您可以在其中执行各种编程范例;您通常必须自己实现大部分范例,因为该语言几乎没有支持,但是 OO 非常简单。

从您的示例中不是很清楚,但是在 C 中对此类事物进行建模的更典型方法是将更基本的数据结构(超类)嵌入到更专业的内部,利用 C 中的第一个成员struct位于偏移量 0的事实从结构本身:

typedef struct {
  float x, y, z;
} Shape;

typedef struct {
  Shape shape;
  float radius;
} Sphere;
于 2014-01-31T09:22:53.310 回答