2012-04-26 82 views
5

我见过很多使用导出/导入关键字可以在Ada/C/C++之间进行通信的地方。如果Ada函数是通用的,那么呢?这甚至有可能吗?您可以将Ada通用函数导出到C++吗?

我的问题是,我需要重用一些遗留代码,我们有许多通用的Ada函数。新的图层将用C++编写,我希望能够将这些现有的Ada通用函数导出到C++包装器中。 (实际上,如果功能不是全局的,我将需要另一个层,但现在不需要)

如果这是不可能的,我只需要创建新的单独的Ada函数,通用。有关这种方法的任何想法?

我绝对是Ada编程的noob,所以请原谅我的无知。谢谢您的帮助。

回答

4

编写一个小的Ada包,其规范包含exported子程序,并且其主体使用§B.3 Interfacing with C and C++中可用的类型实例化这些子程序。不要忽视在C端调用adainit()adafinal()。更多here

+0

我在想这是我必须要做的。我只是希望语言允许它,而不必为每个泛型编写n个函数。谢谢:) – JSolberg 2012-04-27 12:13:15

+1

在这种情况下,问题不是[只] Ada,但C++没有办法说“嘿,编译器,这是一个包/单元/模块/模板”,是吗?看看是否有出口整个包装的方法会很有趣,但这会涉及其他语言:a)要求包装; b)实际上有包装的设施。 – Shark8 2012-04-27 16:15:14

-2

我不熟悉瓦特/阿达,但你应该能够调用导出的函数(假设Ada编译器不会做任何反常)。您应该尝试转储Ada对象文件(编译结果)来检查函数名称。

+2

问题出在Ada的泛型(相当于C++模板)。 – AProgrammer 2012-04-26 18:36:56

+0

这似乎并不相关。他问了混合语言编程。他需要从c代码调用面向对象的构造是不相关的。为了调用导出的函数,他只需要访问函数签名 – user590028 2012-04-27 10:51:18

+2

这非常相关;你不能从C++或C调用C++模板函数,你只能调用一个实例化的模板函数。以同样的方式,你不能调用一个通用的子程序;你必须首先实例化它,然后调用实例化。 – 2012-04-27 11:05:04

相关问题