2014-09-30 4 views
0

У меня есть устройство, которое можно контролировать с помощью класса C++ (https://github.com/stanleyseow/RF24/tree/master/RPi/RF24).Обтекание класса C++ для использования в Python

Я хотел бы использовать этот класс в Python и думал, что смогу его обернуть.

Я нашел много способов сделать это, но не очень подробную документацию с примерами. В частности, я нашел Boost, Cython, SWIG и собственный C Python API.

Какой из них лучший способ в этом случае? И есть ли у вас ссылки на подробные документы/примеры по этому поводу?

Спасибо!

ответ

1

Нет «лучшего»; это полностью зависит от ваших обстоятельств.

Для одного класса собственный C Python API не слишком сложный, , но вам нужно создать целый модуль, а затем класс. Это было бы проще, если вы выставили процедурный интерфейс, а не , чем класс. Если у вас есть только один экземпляр устройства, это будет .

SWIG очень подходит для определения классов C++ и , генерируя модуль Python, который их содержит. Полученный код является относительно сложным, поскольку SWIG пытается охватить все возможные версии Python ; для чего угодно 2.7 или новее (и возможно немного раньше), вы можете делать все непосредственно в C++, без промежуточного Python.

Boost широко использует шаблоны. Это не действительно подходящее решение проблемы; он добавляет много сложности для чего-то относительно простого, если сделать это с помощью внешних инструментов, а не метапрограммировать. Тем не менее, если базовая сложностьне пугает вас, может оказаться, что трудно использовать .

Я не знаком с Китоном.

Во всем мире, если у вас есть только один экземпляр одного простого класса, с использованием родного C API, вероятно, не сложнее, чем других решений, и вводит минимум добавленной внутренней сложности.

+0

На данный момент мне нужен только один экземпляр этого класса. Но если это не так сложно, чтобы иметь возможность обрабатывать несколько экземпляров класса, я думаю, что это может стоить того. – Phyks

+0

Извините, я испортил последний комментарий ...: На данный момент мне нужен только один экземпляр этого класса. Но если это не так сложно, чтобы иметь возможность обрабатывать несколько экземпляров класса, я думаю, что это может стоить того. Мне нужно, чтобы мой сгенерированный код Python был совместимым с Python 3.3+. Я посмотрю на SWIG и стандартный C API. – Phyks

+0

Это немного сложнее: сначала нужно создать модуль и его функции, а затем добавить к нему класс. Определение класса не является сложным, но оно многословно: существует огромная структура, которую вы должны заполнить, например. –

Смежные вопросы