在C中实现vtable而不是使用C ++的目的

问题描述 投票:0回答:2

我刚刚开始深入研究GStreamer框架,我非常惊讶地发现,尽管事实上它是用纯C语言编写的,但它使用了对象和多态性。然后我发现可以在C语言中模拟某些C ++功能,例如继承。这是关于我们自己实现虚拟函数表的信息。我对这个想法有些困惑,为什么有人需要它。如果必须在用C实现虚拟表和在项目中使用C ++之间进行选择,那么我肯定会使用经过测试且众所周知的C ++语言功能实现。在我看来,整个想法就像重新发明轮子。在C中拥有宏的好处是什么:

GST_IS_EVENT(obj)
GST_EVENT_CAST(obj)

在C ++中:

dynamic_cast<Derived*>(&baseObj);

我可以想到两件事:

  • [C被更多人理解为相对好,并且拥有更多贡献者更容易维护代码库
  • C更简单,代码将更易于维护

与通过C ++实现vtable相比,C有什么技术优势吗?

c++ c gstreamer
2个回答
1
投票

最重要的原因是,至少在Linux,Windows和Mac上,C库ABI还是标准库ABI。换句话说,可以从任何语言(支持使用外部库)使用这些库。

C ++是另外一个故事。例如,对于C ++ vtable没有标准的ABI。另外,为了支持方法和函数重载以及名称空间,C ++确实对符号进行名称修饰。然后,异常又影响了函数的调用方式,即使使用相同的编译器,异常甚至可能需要特定的编译器开关。

[可以用C ++编写“ C”,而只导出extern "C"符号,但是如果这样做,您最好也使用C来避免混合语言的复杂性。


-3
投票

可能是因为C ++提供了比其项目所需的功能更多的功能。

也许他们的OOP模型不同于C ++提供的模型。

© www.soinside.com 2019 - 2024. All rights reserved.