Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C和x2B之间有多少互操作性+;斯卡拉呢? 大家都知道java和斯卡拉,但是C++和斯卡拉之间有多少互操作性。例如,一个类可以被另一个类使用吗?_C++_Scala_Interop - Fatal编程技术网

C和x2B之间有多少互操作性+;斯卡拉呢? 大家都知道java和斯卡拉,但是C++和斯卡拉之间有多少互操作性。例如,一个类可以被另一个类使用吗?

C和x2B之间有多少互操作性+;斯卡拉呢? 大家都知道java和斯卡拉,但是C++和斯卡拉之间有多少互操作性。例如,一个类可以被另一个类使用吗?,c++,scala,interop,C++,Scala,Interop,一点也不简单。Java和Scala在同一个虚拟机上工作,Scala被设计为可以很好地与Java一起工作 C++生成本机代码,甚至每个编译器都有自己的生成本机代码的方法。这意味着使用VisualStudio编译的某些类不会轻易与使用gcc编译的另一个类交互 如果你需要与C++交互,你需要使用JNI使用一些胶水。我认为它应该直接与scala一起使用。 您可以使用Swig使交互更加舒适。为了使这种互操作性成为可能,两种实现必须使用相同的中间语言(即Java字节码、.Net-IL、LLVM)进行编译。S

一点也不简单。Java和Scala在同一个虚拟机上工作,Scala被设计为可以很好地与Java一起工作

C++生成本机代码,甚至每个编译器都有自己的生成本机代码的方法。这意味着使用VisualStudio编译的某些类不会轻易与使用gcc编译的另一个类交互

如果你需要与C++交互,你需要使用JNI使用一些胶水。我认为它应该直接与scala一起使用。


您可以使用Swig使交互更加舒适。为了使这种互操作性成为可能,两种实现必须使用相同的中间语言(即Java字节码、.Net-IL、LLVM)进行编译。Scala.Net和C++/CLI是最接近的组合,它们都为.Net生成代码。但即使如此,它也不是那么简单,因为Scala中的类和C++中的类代表了稍微不同的东西。

典型地,斯卡拉代表java的VScala,C++代表C++的本地代码,所以一般的答案应该是“不比任何其他两种随机选择的语言都多”。它构建了从C/C++/Obj-C头文件到Java接口的桥梁。

Java和Scala程序都在JVM上运行;C++产生与平台相关的机器代码。你在问什么?你在寻找一种本地接口吗?是的,JNI就是我所想的。只是一种方法,将一种语言从另一种语言调用到另一种语言。一旦使用JNI在java中暴露C++类,从斯卡拉中使用它们就显得微不足道了。(就像使用Scala中的任何Java类一样。)C++/CLI不会生成纯IL代码,它通常会生成混合的本机代码和托管代码——与C#相比,这就是它的全部意义。因此,我最多只能说,您可以希望Scala.NET和C#之间的代码重用……对于用C或Fortran编写的绑定本机库,我是JNA(Java本机访问)的粉丝。它是一个纯Java解决方案,需要的模板比JNI少得多。然而,对于C++,JNI似乎是更好的选择。thoredge的建议是另一个需要研究的问题,它还为BridJ生成了绑定,这可能会填补JNA的一些空白。