Question

J'ai implémenté une classe en C ++. Je veux l'utiliser avec Python. Veuillez suggérer une méthode étape par étape et expliquez chaque étape. Quelque chose comme ça ...

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

Maintenant, en Python

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

S'il vous plaît suggérer. Comment puis-je faire cela? NOTE: Je voudrais savoir la manière manuelle de faire cela. Je ne souhaite aucune dépendance de bibliothèque tierce.

Était-ce utile?

La solution

Recherchez Boost.Python . C'est une bibliothèque pour écrire des modules python en C ++.

Recherchez également SWIG , qui peut également gérer des modules pour d'autres langages de script. Je l'ai utilisé par le passé pour écrire des modules pour ma classe et les utiliser dans python. Fonctionne très bien.

Vous pouvez le faire manuellement à l'aide de l’ API Python / C , en écrivant vous-même l'interface. . C'est assez bas, mais vous allez acquérir beaucoup de connaissances supplémentaires sur le fonctionnement de Python dans les coulisses (et vous en aurez besoin quand même lorsque vous utiliserez SWIG).

Autres conseils

ctypes est correct. Il est vraiment facile à utiliser, et il est livré en standard avec Python. Malheureusement, il ne peut communiquer qu'avec les bibliothèques partagées (Unix) ou les DLL (Windows) ayant une interface de style C, ce qui signifie que vous ne pouvez pas vous connecter directement à un objet C ++. Mais vous pouvez utiliser un système de poignées dans lequel une poignée fait référence à un objet particulier.

>>> getInt(h)
12

Je pense que c'est simple, facile à comprendre et ne nécessite pas de bibliothèques supplémentaires.

Je vous suggérerais d'essayer SWIG ou sip (KDE / PyQt).

Lien SWIG: http://www.swig.org/
Lien SIP: http://freshmeat.net/projects/python-sip/

Celles-ci peuvent être utilisées pour envelopper des classes C ++ et leur fournir une interface Pythonic.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top