Python связывание функций в программе на C ++

У меня есть программа, написанная на c ++, которая работает сама по себе, однако мы хотим сделать ее доступной для Python. В частности, у нас есть несколько функций, которые более эффективны в c ++, но мы делаем много других вещей с выводом, используя скрипты Python. Я не хочу переписывать весь main () в Python, так как мы используем алгоритмы поиска корня Boost и другие функциональные возможности, которые было бы непросто сделать в Python.

Можно ли добавить привязку Python к этим функциям, сохраняя main () с ++? Я никогда не делал привязки Python раньше, но я посмотрел на Boost.python так как мы уже используем Boost. Большинство примеров используют функции / классы c ++ в hpp-файле и встраивают их в программу на python, что не совсем то, что нам нужно.

Мы хотим, чтобы наша программа на С ++ была автономной, чтобы она могла работать так, как она есть, если пользователи хотят, а также позволяла пользователям вызывать эти функции из программы на Python. Было бы здорово использовать один и тот же Makefile и exe. Мы не хотим создавать отдельную библиотеку c ++, содержащую связанные функции; мы не заинтересованы в создании питонной версии кода, просто предоставляя доступ к этим полезным функциям.

Спасибо

0

Решение

У нас есть обширная библиотека c ++, которую мы сделали доступной для python, используя класс-оболочку python, который вызывает интерфейс, который мы определили в boost python.

Один класс Python обрабатывает все запросы в Python, вызывая модуль расширения Python, написанный на C ++ с Boost Python. Расширение Python выполняет код C ++, поэтому он может ссылаться и использовать что угодно из исходной библиотеки.

Вы сказали, что ваш c ++ — исполняемый файл. Почему вы не можете использовать системные вызовы для запуска процесса оболочки? Вы можете сделать это на любом языке, включая Python. Я думал, что вы хотите получить доступ к отдельным функциям, а это значит, что вам нужны все ваши функции в статической библиотеке.

Вы обычно строите свой C ++ exe, связывая общий код. Вы делаете «модуль расширения python boost», который связывает общий код и может быть импортирован скриптом python. И, конечно, исполняемый модуль, который связывает и тестирует общий код. Я предпочитаю, чтобы общий код представлял собой автономную статическую библиотеку (используйте -fPic, если есть сборка posix gcc).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]