我们拥有经过数十年开发的大型 C 代码库。代码的特点之一是对函数指针和伪继承的依赖很大。习语(如讨论 here )如下所示:

typedef struct twod_ {
    double x, y;
} twod;

typedef struct threed_ {
    twod super;
    double z;
} threed;

threed *point_3d;
twod *point_2d = (twod *)point3d;

此时 point_2d->xpoint_3d->x 是同一个内存块。

我的问题是:
  • 这个习语在现代生产代码中仍然流行吗? (任何推荐的开源示例)
  • 这段代码对性能有要求——这个习语对速度和/或内存使用有帮助吗?
  • 它的实现方式(或由于多年的代码膨胀)现在感觉有点像意大利面条式代码——一般来说,这是实现的问题,还是习惯用法?或者换句话说,在一个理想的世界里,这个习语的 500k LOC 会很快被理解吗?

  • 当然,“如果它没有坏,就不要修理它”这句格言值得牢记;然而,目前这并没有真正帮助我们,所以我们认为我们可能需要更深入地重构......

    谢谢!

    最佳答案

    我会说这很好,当然它很容易混淆,因为它变得相当冗长。

    对我来说,“C with classes”的旗舰开源实现可能是 GTK+ ,特别是 gobject 模块。

    10-07 12:50