Se stai cercando la velocità, voterei sicuramente anche per Cython. Per quanto ne so su altri modi per interfacciare C++ con Python, Cython non è tanto pesante da mantenere/aggiornare rispetto ad altri strumenti di collegamento, per quanto riguarda il guadagno di "fluidità del flusso di lavoro". (Il codice Cythonized sostiene di essere veloce quanto la pura C, o non molto lontano da quello, che lo rende anche molto interessante).
In ogni caso, ci sono molte buone API per il collegamento del codice Python con C++ (Boost.Python, ...), ma penso che tutti loro porteranno all'esigenza di esporre i metodi direttamente nel codice sorgente C++ (Voi ragazzi dimmi se ho torto o impreciso).
D'altra parte, Cython ti darà la possibilità di mantenere la tua API C++ (GUI, o qualsiasi altra cosa ...) rigorosamente separata dalle fonti di esposizione (le cosiddette estensioni .pyx). Il flusso di lavoro finale sarebbe:
API C++ => Compilazione come oggetto condiviso => estensione di Cython (importazione ed esposizione di caratteristiche C++) => Compilazione dell'estensione (s) => Uso dell'estensione (estensione da aggiunto al tuo percorso Python).
La buona notizia è che dovrete mantenere solo le parti mutevoli del vostro pool di file .pyx relativi alle funzionalità C++ in evoluzione (tra quelle che richiedono di essere esposte). All'inizio è una specie di investimento, ma, per esperienza, una volta che questo flusso di lavoro è stato impostato, è abbastanza semplice far crescere tutta la complessità.
Ora riguardo alla necessità di estendere le classi che hanno virtuals e di sovrascriverle da Python (se ho capito correttamente cosa intendevi). È fattibile Ancora una volta, non così diretto, ma dovresti dare un'occhiata a questo thread.
Le cattive notizie: in quel caso particolare dovrete creare degli adattatori/interfacce C++ extra, per abilitare la chiamata del metodo genitore se il python esteso non sovrascrive il metodo del genitore dato. (Si noti che la ridefinizione di un metodo esposto C++, virtuale o meno, da python è una sostituzione della funzione, ma non è assolutamente equivalente a una sostituzione).
Hummf, ora che mi sto leggendo, sembra un po 'confuso. Spero che questo sia ancora utile.
Posso essere più specifico sul flusso di lavoro che dovrai gestire se scegli l'opzione Cython, se me lo chiedi, ma penso che il thread collegato sopra sia piuttosto un buon punto di partenza ...
IMHO le tue parti Python e C++ sono quindi inclini ad intrecciarsi tra di loro in ogni caso, se ci si integra a quel livello. Ma sostengo la ricerca di legami piacevoli in generale. +1. –