C中的数据表示:链接结构与大结构

时间:2014-01-31 09:09:43

标签: c struct data-representation

在看someone's code时,我被一种表示数据的方式所震惊,在C语境中,这对我来说似乎很奇怪:

此人需要为光线追踪器表示不同类型的几何形状, 不同的每个几何形状在它们的结构上都有相似之处。 因此,这个人决定通过指针链接在一起的或多或少的抽象结构来表示几何。

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

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

如果您的某些功能可以在您的数据的某个特定层上运行,那么一种解释就是减少开销。对吗?

在我看来,它似乎是OOP习惯的残余。

1 个答案:

答案 0 :(得分:2)

你说" OOP习惯的残余"好像那些在C中显然不合适的东西。我说你错了,在C中有相当大的面向对象的代码集合。它有效。

面向对象是一种排列和建模事物的方式,它与编程语言无关。 C是低级的,你可以在其中做各种编程范式;你自己经常必须实现大部分范式,因为语言支持不多,但OO非常简单。

从你的例子中不是很清楚,但是在C中建模这样的事物的更典型的方法是通过在更专业的内部嵌入更基本的数据结构(超类),利用第一个成员的事实在C struct中与结构本身偏移0:

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

typedef struct {
  Shape shape;
  float radius;
} Sphere;