c - C : good, 中的继承不好,还是其他?

标签 c oop

我们拥有经过数十年开发的大型 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是同一 block 内存。

我的问题是:

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

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

谢谢!

最佳答案

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

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

关于c - C : good, 中的继承不好,还是其他?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8929082/

相关文章:

类实现接口(interface)时PHP Trait冲突

java - 为什么 java.lang.Object 中的 clone() 方法受到保护?

c - 在 MSVC 中处理 __attribute__

python - Python C 扩展中的动态方法切换

c - 使用 OpenMP 进行 LU 分解似乎很慢,需要建议

java - 可变类作为不可变类的子类

C++ 类数组类元素定义

c - 带线程的递归 Fib、段错误?

c - 对整数圆形数组进行排序,交换元素之间的元素为 1

c++ - 对象切片: Access dervied class methods from base class object