문제

현재 프로젝트를 진행하고 있습니다. 프로그램을 스크립트 할 수 있도록 C ++ 클래스를 Python으로 포장해야했습니다. 따라서 내 특정 경험은 또한 우리 프로그램에 Python 통역사를 포함시키는 것도 포함되었습니다.

내가 시도한 대안은 다음과 같습니다.

  • boost.python

    Boost.python이 생산 한 Cleaner API를 좋아했지만 사용자가 추가 종속성을 설치해야한다는 사실로 인해 SWIG로 전환했습니다.

  • 통음

    SWIG의 주요 장점은 최종 사용자가 최종 프로그램을 사용하기 위해 설치해야한다는 것입니다.

당신은 이것을 무엇을했는지, 그리고 그것에 대한 당신의 경험은 무엇입니까?

도움이 되었습니까?

해결책

나는 동일한 프로젝트를 위해 두 가지를 모두 사용했습니다. 부스트는 STL과 더 잘 통합되고 특히 C ++ 예외가 더 좋습니다. 또한 메모리 관리 메커니즘 (C ++ 메모리 관리 및 Python GC를 연결하려는 시도)은 SWIG보다 훨씬 유연합니다. 그러나 SWIG가 있습니다 많이 더 나은 문서화, 외부 의존성이 없으며, 파이썬을 위해 Swig로 라이브러리를 랩핑하면 Java/Perl/Ruby Wrapper를 얻는 것도 절반 이상입니다.

나는 명확한 선택이 있다고 생각하지 않습니다. 소규모 프로젝트의 경우, 나는 Boost.python과 함께 다시 갈 것입니다.

다른 팁

편집 - Robin Project는 슬프게 버려졌으며 오늘날에는별로 사용되지 않을 것입니다.

나는 사용했다 남자 이름 큰 성공으로.

엄청난 C ++ 유형과 통합하고 공유 객체에 컴파일하고 포함 할 단일 .cpp 파일을 작성합니다.

제안합니다 한모금. SIP는 다음과 같은 이유로 인해 SWIG보다 낫습니다.

  1. 주어진 파일 세트의 경우 SWIG는 SIP보다 더 많은 복제 (오버 헤드) 코드를 생성합니다. SIP는 정적 또는 동적으로 연결될 수있는 라이브러리 파일을 사용하여 덜 중복 (오버 헤드) 코드를 생성하도록 관리합니다. 다시 말해 SIP는 확장 성이 향상됩니다.

  2. SIP 실행 시간은 SWIG의 실행 시간보다 훨씬 적습니다. 나타내다 파이썬 래퍼 도구 : 성능 연구. 불행히도 링크가 고장났습니다. 요청시 공유 할 수있는 개인 사본이 있습니다.

파이렉스 또는 시톤 또한 두 세계를 혼합하는 좋은 방법입니다.

이 도구를 사용하여 C ++를 포장하는 것은 C를 감싸고 C를 감싸는 것이 약간 까다 롭지 만 수행 할 수 있습니다. 여기 그것에 대한 위키 페이지입니다.

Boost :: Python의 큰 장점은 ipython 쉘에서 탭 완료를 허용한다는 것입니다. 부스트로 직접 노출 된 C ++ 클래스를 가져 오거나 서브 클래스를 가져 오며 그때부터는 순수한 Python 클래스처럼 작동합니다.

단점 : 부스트를 설치하고 사용하는 데 시간이 오래 걸리기 때문에 모든 탭 완성 시간 절약이 상각되지 않을 것입니다 ;-(

그래서 나는 Swig : 종과 휘파람이 없지만 짧은 입문 예를 들어 안정적으로 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top