[英]Purpose of implementing vtable in C instead of using C++
我刚刚开始深入研究 GStreamer 框架,我非常惊讶地发现,尽管它是用纯 C 编写的,但它使用了对象和多态性。 然后我发现可以在 C 中模拟一些 C++ 功能,例如 inheritance。 这是关于我们自己实现一个虚函数表。 我对这个想法有点困惑,为什么有人需要它。 如果我必须在 C 中实现虚拟表和在项目中使用 C++ 之间做出选择,我肯定会使用经过测试且众所周知的 C++ 语言特性的实现。 在我看来,整个想法就像重新发明轮子。 在 C 中使用宏有什么好处:
GST_IS_EVENT(obj)
GST_EVENT_CAST(obj)
在 C++ 中:
dynamic_cast<Derived*>(&baseObj);
我能想到的有两点:
C 与 C++ 相比是否有任何技术优势?
最重要的原因是,至少在 Linux 和 Windows 和 Mac 上,C 库 ABI 也是标准库 ABI。 换句话说,可以从任何语言(支持使用外部库)中使用这些库。
C++ 是另一回事。 例如,C++ vtable 没有标准 ABI。 此外,为了支持方法和 function 重载和名称空间,C++ 确实对符号进行了名称修改。 然后异常是影响函数调用方式的另一件事,即使使用相同的编译器,它甚至可能需要特定的编译器开关。
可以只用 C++ 编写“C”,并只导出extern "C"
符号,但如果这样做,您不妨使用 C 以避免混合语言的复杂性。
可能是因为 C++ 提供的功能比他们项目所需的要多得多。
也许他们的 OOP model 与 C++ 提供的不一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.