Как я могу использовать класс C ++ в Python? - PullRequest
33 голосов
/ 02 марта 2009

Я реализовал класс в C ++. Я хочу использовать его с Python. Пожалуйста, предложите пошаговый метод и уточните каждый шаг. Что-то вроде этого ...

class Test{
     private:
        int n;
     public:
        Test(int k){
            n=k;
        }
        void setInt(int k){
            n = k; 
        }
        int getInt(){
            return n;
        }
};

Теперь в Python

>>> T1 = Test(12)
>>> T1.getInt()
12
>>> T1.setInt(32)
>>> T1.getInt()
32

Пожалуйста, предложите. Как я могу это сделать? ПРИМЕЧАНИЕ: я хотел бы знать ручной способ сделать это. Я не хочу никакой зависимости от сторонней библиотеки.

Ответы [ 3 ]

25 голосов
/ 02 марта 2009

Просмотр Boost.Python . Это библиотека для написания модулей Python на C ++.

Также посмотрите на SWIG , который также может обрабатывать модули для других языков сценариев. Я использовал его в прошлом для написания модулей для своего класса и использования их в Python. Прекрасно работает.

Вы можете сделать это вручную с помощью Python / C API , написав интерфейс самостоятельно. Это довольно низкий уровень, но вы получите много дополнительных знаний о том, как Python работает за кулисами (и он вам понадобится, когда вы все равно будете использовать SWIG).

10 голосов
/ 02 марта 2009

ctypes это хорошо. Он действительно прост в использовании и входит в стандартную комплектацию Python. К сожалению, он может общаться только с общими библиотеками (Unix) или DLL (Windows), которые имеют интерфейс в стиле C, что означает, что вы не можете напрямую взаимодействовать с объектом C ++. Но вы могли бы использовать систему дескрипторов, где дескриптор ссылается на определенный объект.

>>> getInt(h)
12

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

6 голосов
/ 02 марта 2009

Я бы посоветовал вам попробовать SWIG или sip (KDE / PyQt).

SWIG ссылка: http://www.swig.org/
SIP-ссылка: http://freshmeat.net/projects/python-sip/

Они могут использоваться, чтобы обернуть классы C ++ и предоставить им интерфейс Pythonic.

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