2014-09-30 5 views
0

C++ 클래스 (https://github.com/stanleyseow/RF24/tree/master/RPi/RF24)를 통해 제어 할 수있는 장치가 있습니다.Python에서 사용할 C++ 클래스의 래핑

저는이 클래스를 파이썬에서 사용할 수 있기를 원하며이를 감쌀 수 있다고 생각했습니다.

많은 방법을 찾았지 만 예제가있는 설명서는 많지 않습니다. 특히, Boost, Cython, SWIG 및 원시 C Python API를 발견했습니다.

어떤 경우가 가장 좋은 방법입니까? 그리고 이것에 대한 자세한 문서화/예제에 대한 링크가 있습니까?

감사합니다.

답변

1

"최고"는 없습니다. 그것은 전적으로 귀하의 상황에 달려 있습니다.

단일 클래스의 경우 네이티브 C 파이썬 API가 너무 어렵지는 않지만 이지만 전체 모듈을 만든 다음 클래스를 만들어야합니다. 절차보다 절차 적 인터페이스를 노출하면 이 더 간단 해집니다. 장치 인스턴스가 하나만있는 경우이 이 적절한 해결 방법입니다.

SWIG는 C++ 클래스 정의를 가져 오는 데 매우 유용하며 은이를 포함하는 Python 모듈을 생성합니다. 결과적으로 코드는 비교적 복잡합니다. SWIG는 모든 가능한 파이썬 버전을 포함하기 때문에; 2.7 또는 그 이후 (그리고 아마도 조금 더 일찍), 중간 파이썬없이 C++에서 직접 모든 것을 할 수 있습니다.

Boost는 템플릿을 광범위하게 사용합니다. 문제에 대한 적절한 해결책은 실제로 이 아닙니다. 메타 프로그래밍이 아닌 외부 도구를 사용하면 상대적으로 단순한 무언가를 위해 복잡성을 많이 추가합니다. 여전히 기본 복잡도로 인해 이 두렵지 않으면 이 사용하기 어려울 수도 있습니다.

저는 Cython에 익숙하지 않습니다. 당신이 가진 모든 네이티브 C API를 사용하여 간단한 클래스, 의 인스턴스 인 경우

전 세계적으로 아마 더 어려운 다른 솔루션에 비해 없으며, 추가 내부 복잡성의 최소 소개합니다.

+0

지금은이 클래스의 인스턴스 하나만 필요합니다. 그러나 클래스의 여러 인스턴스를 처리 할 수있는 것이 훨씬 더 복잡하지 않으면 그만한 가치가 있다고 생각합니다. – Phyks

+0

죄송합니다, 마지막 코멘트가 엉망이되었습니다 ... : 지금은이 클래스의 인스턴스 하나만 필요합니다. 그러나 클래스의 여러 인스턴스를 처리 할 수있는 것이 훨씬 더 복잡하지 않으면 그만한 가치가 있다고 생각합니다. 나는 생성 된 파이썬 코드가 파이썬 3.3+ 호환이 필요하다. SWIG 및 표준 C API에 대해 살펴 보겠습니다. – Phyks

+0

좀 더 복잡합니다. 모듈과 함수를 먼저 생성 한 다음 클래스를 추가해야합니다. 클래스를 정의하는 것은 복잡하지 않지만 자세한 정보입니다. 예를 들어, 작성해야하는 막대한 구조가 있습니다. –

관련 문제