2009-03-02 4 views
30

Ich habe eine Klasse in C++ implementiert. Ich möchte es mit Python verwenden. Bitte schlagen Sie Schritt für Schritt Methode vor und erarbeiten Sie jeden Schritt. Somthing so ...Wie kann ich die C++ - Klasse in Python verwenden?

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

, jetzt in Python

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

Bitte suggest.How kann ich dies tun? HINWEIS: Ich würde gerne manuellen Weg wissen, um das zu tun. Ich möchte keine Drittanbieter-Bibliotheksabhängigkeit.

+1

Nur neugierig - warum möchten Sie Dritte vermeiden? –

Antwort

23

Schauen Sie in Boost.Python. Es ist eine Bibliothek, um Python-Module mit C++ zu schreiben.

Schauen Sie auch in SWIG, die auch Module für andere Skriptsprachen handhaben kann. Ich habe es in der Vergangenheit verwendet, um Module für meine Klasse zu schreiben und sie in Python zu verwenden. Funktioniert super.

Sie können es manuell tun, indem Sie Python/C API verwenden und die Schnittstelle selbst schreiben. Es ist ziemlich niedrig, aber Sie werden viel zusätzliches Wissen darüber gewinnen, wie Python hinter der Szene funktioniert (und Sie werden es brauchen, wenn Sie SWIG trotzdem benutzen).

+12

Erfüllt nicht die Anforderung "Ich möchte keine Drittanbieter-Bibliotheksabhängigkeit". – Constantin

+2

Sie benötigen die Python-Bibliothek trotzdem. Es beinhaltet natürlich die Python/C API. –

9

ctypes ist gut. Es ist wirklich einfach zu bedienen und es kommt standardmäßig mit Python. Leider kann es nur mit freigegebenen Bibliotheken (Unix) oder DLLs (Windows) kommunizieren, die eine C-ähnliche Schnittstelle haben, was bedeutet, dass Sie nicht direkt mit einem C++ - Objekt kommunizieren können. Sie können jedoch ein Handle-System verwenden, bei dem sich ein Handle auf ein bestimmtes Objekt bezieht.

>>> getInt(h) 
12 

Ich denke, das ist einfach, leicht zu verstehen, und erfordert keine zusätzlichen Bibliotheken.

+1

Können Sie bitte näher erläutern, was es bedeutet, "Sie können nicht mit gemeinsam genutzten Bibliotheken oder DLLs sprechen, was bedeutet, dass Sie nicht direkt mit einem C++ - Objekt interagieren können"? Was wäre ein verändertes Verhalten bei der Verwendung von C++ - Objekten in Python? Würde es eine spürbare Wirkung haben? Ich muss schließlich eine Bindung an meine C++ API in Python schreiben, Danke im Voraus für jede Hilfe. –

+3

@ 2g7hgfdr8324, du hast mich falsch zitiert. Ich habe nicht gesagt "Sie können nicht mit gemeinsam genutzten Bibliotheken oder DLLs sprechen". Ich sagte das Gegenteil. Ja, wenn Sie Ihre C++ API als DLL verfügbar machen können, dann können Sie sie über Ctypes von Python aus aufrufen. Ihre Schnittstelle muss jedoch C sein, nicht C++. –