为什么在C++代码中提供其他语言的包装比C代码更难?C和C++接口
C和C++接口
回答
这由图书馆本身以及它的设计有很大的不同。
一般而言,C++更复杂,因为它具有对象,类和接口,其中C主要是函数。一个类的成员函数被命名和调用的方式不同,因此包装它们需要更多的工作来提供相同的名称。
一旦包装库提供了一个等价的接口并且调用约定被处理,下一个区别是C++允许将对象作为函数参数传递,这可能需要深度拷贝和类似的东西。在一个采用纯指针的库(例如COM)中,这不是问题(这是COM与多种语言和其他系统互操作的一部分),但处理必要的复制代码依赖于编译器,即使在C++中也是如此。
每种语言在与其他语言进行交互时都有其独特的挑战。
由于其他语言不具备的特性,您可以考虑C++“更困难”。以多重继承为例。这是一个非常棘手的功能,许多人都说根本不使用它。但如果使用它,你会如何将它翻译成另一种语言?
不过,关键之处在于,语言本身并不难缠绕 - 问题在于其他语言中不存在的映射功能几乎不可能。但是,如果该功能不存在于该语言中,则必须问自己为什么它不在那里,如果您甚至应该首先使用它。
我会给这个+1,除了“如果你甚至应该使用它”。这意味着它是一种无用的语言功能,因为其他语言不需要它,而不是“如果你应该在封装的界面中使用它” –
@MooingDuck那么,“如果你应该...”可能会最终评估为真。我不会称之为多重继承之类的无用功能,而是其他语言特别避免的容易出错的功能。所以,是的,应该考虑是否要使用过去导致其他开发人员头痛的功能。 – corsiKa
根据别人的回答有所延伸,另一个需要考虑的讨厌问题就是例外。在操作系统,语言或运行库中可以使用多种方法实现异常。 C++实现它们的方式在某些重要方面是独一无二的。如果从另一种语言调用C++例程并引发异常,那么应该如何处理它并不完全清楚。一种方法是简单地声明所有这些例外是致命的。这不是不合理的,但它阻止了其他语言被用来执行其他有用的任务。例如,考虑一个将通过项目列表枚举并计算总和的例程;如果其中一个项目的评估引发异常,则该异常应渗透到例程的调用者以枚举列表。但是,如果枚举列表的例程是用另一种语言编写的,那么安排例外在层中正确渗透可能会有问题。
- 1. 接口MySQL和C
- 2. C#接口C++ DLL?
- 3. opencv c和C++接口转换表
- 4. protobuf-net和C#的接口
- 5. C#接口和泛型
- 6. C#泛型和接口
- 7. OOP和C中的接口
- 8. c#MVC - 继承和接口
- 9. C#接口和基类
- 10. C#接口到DLL和ExecutionEngineException
- 11. C#:接口:2个接口
- 12. NodeJS-C接口
- 13. 接口在C#
- 14. R/C++接口
- 15. C#:接口
- 16. C#IEnumerable接口
- 17. C# - 接口类
- 18. Python3或C/C++:TWAIN接口
- 19. 类和接口与统一和C#
- 20. 在C++中定义需要用C#和C++实现的接口
- 21. 在C++中使用C#接口或在C#中使用C++接口
- 22. C#转换接口
- 23. C#接口问题
- 24. 与stdbool.h接口C++
- 25. Winforms c#outlook接口
- 26. .C接口与R
- 27. C#接口问题
- 28. C#接口问题
- 29. C#接口问题
- 30. C#接口继承
把C++打包比C要困难得多? [引证需要] – corsiKa
嗯,这是一个合理的问题,它真的很难。我想,只是用错误的方式蹭人。也许不用[C++]标签再问一次。 –
这是一个合法的技术问题的合法问题。到OP:谷歌C + + ABI。 –