繁体   English   中英

C和C ++接口

[英]C and C++ interface

为什么向C ++代码提供其他语言的包装而不是C代码要困难得多?

与其他语言进行交互时,每种语言都有其独特的挑战。

从某种意义上讲,由于其他语言所没有的功能,您可能会认为C ++更加“困难”。 以多重继承为例。 这是一个非常棘手的功能,很多人只是简单地说根本不使用它。 但是,如果使用它,您将如何将其翻译成另一种语言?

但是,关键点在于该语言本身不再难于包装-问题在于映射其他语言中不存在的功能几乎是不可能的。 但是,如果该功能不存在该语言,则必须问自己为什么不存在该功能,以及是否一开始就应该使用它。

根据库本身以及库的设计,这有很大不同。

一般来说,C ++更复杂,因为它具有对象,类和接口,其中C主要是函数。 类的成员函数以不同的方式命名和调用,因此包装它们需要花费更多的工作来提供等效的名称。

将库包装起来以提供等效接口并处理调用约定后,下一个区别是C ++允许将对象作为函数参数进行传递,这可能需要深层副本和类似内容。 在仅使用指针的库中,例如COM,这不是问题(这就是为什么COM可与许多语言和其他系统互操作的原因之一),但是即使在C ++中,处理必要的复制代码也非常依赖于编译器。

在某种程度上扩展到其他人给出的答案之后,要考虑的另一个令人讨厌的问题是例外。 可以通过多种方式在操作系统,语言或运行时库中实现异常。 C ++实现它们的方式在某些重要方面非常独特。 如果从另一种语言调用C ++例程并引发异常,则尚不清楚应如何处理。 一种方法是简单地将所有此类异常声明为致命的。 这不是不合理的,但是它可以防止其他语言被用来执行原本有用的任务。 例如,考虑一个例程,该例程将枚举项目列表并计算总和。 如果对其中一项的求值抛出异常,则该异常应渗透到例程的调用者以枚举列表。 但是,如果枚举列表的例程是用另一种语言编写的,那么安排例外以使其适当地渗透到各个层中可能会出现问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM