2009-03-02 16 views
30

Ho implementato una classe in C++. Voglio usarlo con Python. Si prega di suggerire il metodo passo passo ed elaborare ogni passaggio. Somthing come questo ...Come posso usare la classe C++ in Python?

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

Ora, in Python

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

prega suggest.How posso fare questo? NOTA: vorrei conoscere il modo manuale per farlo. Non voglio alcuna dipendenza da libreria di terze parti.

+1

Solo curioso: perché vuoi evitare le terze parti? –

risposta

23

Cerca su Boost.Python. È una libreria per scrivere moduli python con C++.

Cerca anche in SWIG che può anche gestire moduli per altri linguaggi di scripting. L'ho usato in passato per scrivere moduli per la mia classe e usarli all'interno di python. Funziona alla grande.

È possibile farlo manualmente utilizzando lo Python/C API, scrivendo l'interfaccia da soli. È abbastanza basso, ma acquisirai molte ulteriori informazioni su come Python lavori dietro la scena (e ne avrai comunque bisogno quando usi SWIG).

+12

Non soddisfa il requisito "Non desidero alcuna dipendenza dalla libreria di terze parti". – Constantin

+2

Avrai comunque bisogno della libreria python. include ovviamente python/c api. –

9

ctypes è buono. È veramente facile da usare e viene fornito di serie con Python. Sfortunatamente può parlare solo con le librerie condivise (Unix) o DLL (Windows) che hanno un'interfaccia in stile C, il che significa che non puoi interfacciarti direttamente con un oggetto C++. Ma potresti usare un sistema di maniglie in cui una maniglia si riferisce a un particolare oggetto.

>>> getInt(h) 
12 

Penso che sia semplice, facile da capire e non richiede librerie aggiuntive.

+1

Puoi approfondire cosa significa "non puoi parlare con librerie o DLL condivise, il che significa che non puoi interfacciare direttamente con un oggetto C++"? Quale sarebbe il comportamento da cambiare quando si usano oggetti C++ in Python? Avrebbe un impatto notevole? Ho bisogno di scrivere un binding alla mia API C++ in Python, grazie in anticipo per qualsiasi aiuto. –

+3

@ 2g7hgfdr8324, mi hai citato in modo errato. Non ho detto "non puoi parlare alle librerie o alle DLL condivise". Ho detto il contrario. Sì, se puoi esporre la tua API C++ come una DLL, puoi chiamarla da Python tramite ctypes. La tua interfaccia dovrà essere semplice in C, non in C++. –

Problemi correlati