首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C和C++接口

C和C++接口
EN

Stack Overflow用户
提问于 2011-10-16 01:15:55
回答 3查看 165关注 0票数 0

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-16 01:22:34

这因库本身和设计方式的不同而有很大差异。

一般来说,C++更复杂,因为它有对象、类和接口,而C语言主要是函数。一个类的成员函数的命名和调用是不同的,所以包装它们需要更多的工作才能提供等价的名称。

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

票数 1
EN

Stack Overflow用户

发布于 2011-10-16 01:22:25

当涉及到与其他语言交互时,每种语言都有其独特的挑战。

你可以认为C++在某种意义上“更难”,因为它的特性是其他语言所没有的。以多重继承为例。这是一个非常棘手的功能,也是许多人简单地说根本不使用的一个功能。但是如果它被使用了,你会如何把它翻译成另一种语言呢?

然而,关键的一点是,语言本身并不更难包装-问题是映射其他语言中不存在的功能几乎是不可能的。然而,如果这个特性在该语言中不存在,你必须问自己为什么它不在那里,如果你从一开始就应该使用它。

票数 2
EN

Stack Overflow用户

发布于 2011-10-17 00:57:53

在某种程度上扩展其他人的回答,另一个需要考虑的令人讨厌的问题是例外。有许多方法可以在操作系统、语言或运行时库中实现异常。C++实现它们的方式在某些重要方面是独一无二的。如果从另一种语言调用C++例程并抛出异常,那么应该如何处理并不完全清楚。一种方法是简单地声明所有这些异常都是致命的。这不是不合理的,但它阻止了其他语言被用来执行原本有用的任务。例如,考虑一个例程,该例程将枚举项目列表并计算总和;如果其中一个项目的求值抛出异常,则该异常应向上渗透到例程的调用方,以枚举列表。但是,如果枚举列表的例程是用另一种语言编写的,那么安排异常在各层中正确地向上渗透可能会有问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7779354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档