Tôi tự hỏi nếu có một số cách để gọi mã C++ từ Common Lisp (tốt nhất là portably, và nếu không, tốt nhất là trong SBCL, và nếu không, tốt, sau đó Clozure, CLisp hoặc ECL).Gọi C++ (không phải C) từ Common Lisp?
C++ sẽ được gọi bên trong vòng lặp để tính toán số, vì vậy sẽ rất tuyệt nếu cuộc gọi nhanh.
CFFI dường như không hỗ trợ này:
"Khái niệm này có thể được khái quát hóa để ngôn ngữ khác; tại thời điểm văn bản, chỉ hỗ trợ C CFFI là khá hoàn chỉnh, nhưng C++ hỗ trợ là phúc làm việc trên."
(chương 4 của cuốn cẩm nang)
thủ SBCL của không đề cập đến C++ hoặc; nó thực sự nói
Chương này mô tả giao diện SBCL của các chương trình và thư viện (và C, vì giao diện C là một loại ngôn ngữ chung của thế giới Unix, các chương trình và các thư viện trong chung khác.)
Mã C++ sử dụng OO và quá tải toán tử, vì vậy nó thực sự cần được biên dịch bằng g ++.
Và theo như tôi biết, tôi có thể có hàm C++ main() và viết trình bao bọc cho hàm C, nhưng không phải là cách khác - đúng không?
Dù sao ... Có cách nào để thực hiện việc này không?
Cảm ơn bạn!
Tùy chọn thứ hai sẽ tốt, nhưng mã C++ (không phải của tôi) sử dụng quá tải toán tử. Tôi cho rằng tôi không thể decalare một nhà điều hành "C" bên ngoài ... Tùy chọn đầu tiên phụ thuộc vào trình biên dịch đang được sử dụng, nhưng là một gợi ý tốt! – Jay
Bạn vẫn có thể gọi các toán tử quá tải từ bên ngoài, bạn chỉ cần có một chút sáng tạo với API của mình.Ví dụ: 'extern" C "void add_Foo (kết quả Foo *, const Foo * foo1, const Foo * foo2) {* result = * foo1 + * foo2; } ' –
Không phải tất cả các hàm C++ đều" đun sôi xuống C ". Các hàm thành viên thường sử dụng một quy ước gọi khác ngoài tên mangling. (Tôi tin vào MSVC trên x86, tham số 'this' này được truyền trong một thanh ghi, trong khi tất cả các tham số trong hàm C được truyền trên stack) – jalf