Common Lisp에서 C++ 코드를 호출 할 수있는 방법이 있는지 궁금하다. (가능하면, 가능하면 SBCL에, 가능하지 않다면, 가능하다면 Clozure, CLisp 또는 ECL로).Common Lisp에서 C++ (C가 아님)을 호출 하시겠습니까?
C++은 숫자 계산을 위해 내부 루프라고 부르기 때문에 호출이 빠르면 좋을 것입니다. 만 CFFI의 C 지원은 상당히 완전한 입니다 글을 쓰는 시점에서하지만, C++ 지원은 존재입니다
이"개념은 다른 언어로 일반화 될 수 있습니다
CFFI은이 기능을 지원하지 않는 것 같습니다 에서 일하는."
(설명서의 4 장)
++ C를 언급하지 않는 SBCL 설명서 중 하나; 실제로 C 인터페이스는 유닉스 세계의 공용어의 일종이기 때문에
이 장에서는 다른 프로그램과 일반 의 라이브러리, C 프로그램과 라이브러리 (과에 SBCL의 인터페이스를 설명했다.)
C++ 코드는 OO와 연산자 오버로딩을 사용하므로 g ++로 컴파일해야합니다.
그리고 내가 아는 한, C++ main() 함수를 가지고 C 함수에 대한 래퍼를 작성할 수 있지만 그 반대의 방법은 없습니다. 사실입니까?
어쨌든 ...이 작업을 수행 할 수있는 방법이 있습니까?
감사합니다.
두 번째 옵션은 좋지만 C++ 코드 (광산이 아닙니다)는 연산자 오버로딩을 사용합니다. 나는 extern "C"operator +를 decalare 할 수 없다고 생각합니다. ... 첫 번째 옵션은 사용되는 컴파일러에 따라 다르지만 좋은 제안입니다! – Jay
외부에서 오버로드 된 연산자를 호출 할 수 있습니다. API를 사용하여 조금 창의적이어야합니다.예를 들면 다음과 같습니다. 'extern "C"void add_Foo (Foo * result, const Foo * foo1, const Foo * foo2) {* result = * foo1 + * foo2; }' –
모든 C++ 함수가 "일반 C로 종결되지"않습니다. 멤버 함수는 일반적으로 mangling이라는 이름 외에도 다른 호출 규칙을 사용합니다. (나는 x86에서 MSVC를 믿고, 'this' 매개 변수는 레지스터에 전달되지만 C 함수의 모든 매개 변수는 스택에 전달됩니다.) – jalf