Sto cercando un modo semplice per esporre un'istanza di classe C++ a un interprete incorporato in python.Esposizione di un'istanza di classe C++ a un interprete incorporato python
- Ho una libreria C++. Questa libreria è avvolto (utilizzando sorso per il momento) e sono in grado di usarlo dall'interprete Python
- Ho programma principale di C++, che instanciates una classe Foo dalla mia biblioteca e incorpora un interprete python
Vorrei esporre la mia istanza del mondo C++ di Foo al mondo python (e vista come una classe Foo).
È possibile, se sì, come?
penso che sia quasi come nella prima risposta di: boost::python::ptr or PyInstance_New usage
Credo che questo significa che devo usare boost.Python
per avvolgere la mia libreria?
Il mio unico obiettivo è manipolare l'istanza di C++ di Foo nell'interprete python incorporato (non sono sicuro che sia possibile farlo con il metodo precedente).
Spero di essere chiaro, grazie per il vostro aiuto.
aggiornamento
Grazie per le vostre risposte. In effetti, ho già esposto la mia classe Foo a python (con swig).
Quello che ho:
mia classe Foo:
class Foo{...};
mia biblioteca avvolto (compresa la classe Foo) esposta a python: così posso iniziare l'interprete Python e fare qualcosa del genere:
import my_module
foo=my_modulde.Foo()
Cosa voglio:
Avere un programma principale C++ che incorpora un interprete python e manipola le variabili del mondo C++.
int main(int argc, char **argv)
{
Foo foo; // instanciates foo
Py_Initialize();
Py_Main(argc, argv); // starts the python interpreter
// and manipulates THE foo instance in it
Py_Finalize();
return 0;
}
Più chiaro ora? :)
Grazie per la risposta, I prenderà in considerazione anche boost.Python. Ero già a conoscenza della funzionalità boost.Python per esporre le classi C++ ma ho un sacco di codice legacy da includere. Quindi swig sembra una soluzione migliore per me (più veloce? Più semplice? E più target per le lingue) ... :( Ho trovato una delle tue vecchie risposte [qui] (http://stackoverflow.com/q/3378195/1044695). È ancora oscuro :) ma sento che è quello che sto cercando (non solo per un caso ma l'idea globale è qui)? Speravo di farlo con swig e python api? :( – jineff
Ho aggiunto un esempio cercando di rispondere alla tua domanda esatta con boost :: python - ho paura di non poterti aiutare con lo swig – James
Grazie mille! Questo è esattamente quello che voglio (tranne che è boost.python). ho menzionato la tua risposta come utile (molto utile in realtà :)). Aspetterò un po 'per altre risposte (specialmente riguardo a swig) e daremo un'occhiata più approfondita alla tua soluzione. – jineff