【问题标题】:Can you export Ada generic functions to C++?您可以将 Ada 泛型函数导出到 C++ 吗?
【发布时间】:2014-01-06 00:29:14
【问题描述】:

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

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

如果不可能,我只需要创建特定于不同类型的新的单个 Ada 函数,这些函数又调用泛型。对这种方法有什么想法吗?

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

【问题讨论】:

    标签: c++ c ada


    【解决方案1】:

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

    【讨论】:

    • 我在想这就是我必须要做的。我只是希望语言允许它,而不是必须为每个泛型编写 n 个函数。谢谢:)
    • 在这种情况下,问题不在于 [只是] Ada,而是 C++ 没有办法说“嘿,编译器,这是一个包/单元/模块/模板”,是吗?看看是否有办法导出整个包会很有趣,但这将涉及其他语言 a) 需要这些包,并且 b) 实际上拥有包的设施。
    【解决方案2】:

    我不熟悉 Ada,但您应该能够调用导出的函数(假设 Ada 编译器没有做任何反常的事情)。您应该尝试转储 Ada 目标文件(编译结果)以检查函数名称。

    【讨论】:

    • 问题在于 Ada 的泛型(相当于 C++ 模板)。
    • 这似乎根本不相关。他询问了混合语言编程。他需要从 c 代码调用面向对象的构造这一事实是无关紧要的。要调用导出的函数,他应该只需要访问函数签名
    • 非常相关;您不能从 C++ 或 C 调用 C++ 模板函数,只能调用实例化的模板函数。同理,你不能调用泛型子程序;你必须先实例化它,然后调用实例化。
    • @SimonWright,轻微的词汇问题。它不是“模板函数”而是“函数模板”(即生成函数的模板,函数模板不是函数):有一段时间,模板函数用于现在称为函数模板的实例化(这确实是一个函数),但这很容易出错。
    • @user590028,您错过了这样一个事实,即泛型或模板的全部目标是允许它们与多种类型一起使用(即它们有多个签名,通常是一组开放的签名)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多