Встраивание Python в приложение C ++ - PullRequest
5 голосов
/ 11 февраля 2011

Контекст:

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

Решение, которое я предполагаю:

Возможно ли встроить Python или расширить(не на 100% ясно), чтобы тестировщик мог запустить Python REPL и выдавать вызовы функций, которые похожи на обратные вызовы, которые затем обрабатываются нашими классами C ++.Некоторая форма динамического манипулирования нашими объектами во время выполнения.

Ответы [ 3 ]

7 голосов
/ 11 февраля 2011

Я делаю нечто похожее на это в одном из моих проектов, используя SWIG для генерации привязок Python для соответствующих частей кода C ++. Затем я встраиваю переводчика, как предлагали другие. Сделав это, я могу выполнить код Python по желанию (например, PyRun_SimpleString), который может получить доступ к коду C ++. Обычно я использую что-то вроде Singleton, чтобы облегчить доступ к определенным объектам C ++ из python.

Также стоит упомянуть директоров в модулях swig python, которые позволяют виртуальным функциям обрабатываться гораздо более интуитивно. В зависимости от того, что вы делаете, вы можете найти это очень полезным.

4 голосов
/ 11 февраля 2011

То, что вы хотите сделать, возможно, хотя и не тривиально, чтобы получить право. Похоже, вы хотите встроить (а не расширять) Python. Обе темы описаны в руководстве здесь .

Существует довольно много работы по отображению классов C ++ в классы Python, и есть ряд вещей, которые могут пойти не так, как нужно, особенно утечками памяти и многопоточностью (если ваш существующий код является многопоточным). Однако, если это только для использования в тестовой ситуации, а стабильность не является критически важной, тогда это может стать меньшей проблемой.

3 голосов
/ 11 февраля 2011

Да, это возможно. См. это как.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...