2012-04-26 26 views
5

Tôi đã thấy nhiều nơi giao tiếp giữa Ada/C/C++ có thể sử dụng từ khóa xuất/nhập. Còn nếu hàm Ada là một generic; điều này thậm chí có thể?Bạn có thể xuất các hàm chung của Ada sang C++ không?

Vấn đề của tôi là tôi cần sử dụng lại một số mã cũ và chúng tôi có nhiều hàm Ada chung. Lớp mới sắp tới sẽ được viết bằng C++ và tôi hy vọng có thể xuất các hàm chung của Ada hiện có này thành một trình bao bọc C++. (Trên thực tế, nếu các chức năng không phải là toàn cầu, tôi sẽ cần một lớp khác nhưng không bao giờ có ngay bây giờ.)

Nếu KHÔNG THỂ. chung chung. Bất kỳ suy nghĩ về cách tiếp cận này?

Tôi chắc chắn là một noob với lập trình Ada vì vậy xin lỗi sự thiếu hiểu biết của tôi. Cảm ơn đã giúp đỡ.

Trả lời

4

Viết một gói Ada nhỏ có đặc điểm kỹ thuật chứa các chương trình con exported và cơ thể của chúng lập tức các chương trình con đó bằng cách sử dụng các loại có sẵn trong §B.3 Interfacing with C and C++. Đừng bỏ bê gọi adainit()adafinal() ở mặt bên C. Thêm here.

+0

Tôi đã nghĩ rằng đây là những gì tôi sẽ phải làm. Tôi chỉ hy vọng ngôn ngữ cho phép thay vì phải viết n số hàm cho mỗi generic. Cảm ơn :) – JSolberg

+1

Vấn đề không phải là [chỉ] Ada trong trường hợp này, nhưng C++ không có cách nào để nói "hey, trình biên dịch, đây là một gói/đơn vị/mô-đun/mẫu," là có? Nó sẽ là thú vị để xem nếu có một cách để xuất khẩu toàn bộ gói, nhưng đó sẽ liên quan đến các ngôn ngữ khác a) yêu cầu những gói, và b) thực sự có các cơ sở cho các gói. – Shark8

-2

Tôi không quen thuộc với Ada, nhưng bạn có thể gọi các hàm được xuất (giả sử trình biên dịch Ada không làm gì sai). Bạn nên thử kết xuất tệp đối tượng Ada (kết quả của quá trình biên dịch) để kiểm tra các tên hàm.

+2

Vấn đề là với chung của Ada (tương đương với mẫu C++). – AProgrammer

+0

Điều đó dường như không có liên quan chút nào. Anh hỏi về lập trình ngôn ngữ hỗn hợp. Thực tế anh ta cần gọi một cấu trúc hướng đối tượng từ mã c là không liên quan. Để gọi chức năng xuất khẩu, anh ta chỉ cần truy cập vào chữ ký chức năng – user590028

+2

Nó rất phù hợp; bạn không thể gọi một hàm mẫu C++ từ C++ hoặc C, bạn chỉ có thể gọi một hàm mẫu đã được khởi tạo. Trong cùng một cách, bạn không thể gọi một chương trình con chung; bạn phải khởi tạo nó trước, rồi gọi instantiation. –

Các vấn đề liên quan