2012-04-26 24 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

相關問題