Ho scritto un codice di simulazione fisica in C++ e l'analisi dei file di testo di input ne è un collo di bottiglia. Come uno dei parametri di input, l'utente deve specificare una funzione matematica che verrà valutata molte volte in fase di esecuzione. Il codice C++ ha alcune classi di funzioni predefinite per questo (in realtà sono piuttosto complesse sul lato matematico) e alcune capacità di analisi limitate, ma non sono affatto soddisfatto di questa costruzione.Passando l'oggetto C++ al codice C++ tramite Python?
Quello che mi serve è che sia l'algoritmo che la valutazione della funzione rimangano veloci, quindi è vantaggioso mantenerli entrambi come codice compilato (e preferibilmente, le funzioni matematiche come oggetti funzione C++). Tuttavia ho pensato di incollare l'intera simulazione insieme a Python: l'utente poteva specificare i parametri di input in uno script Python, mentre implementava anche lo storage, la visualizzazione dei risultati (matplotlib) e la GUI, anche in Python.
So che la maggior parte delle volte, esporre le classi C++ può essere fatto, ad es. con SWIG ma ho ancora una domanda riguardante l'analisi della funzione matematica definita dall'utente in Python:
È possibile in qualche modo costruire un oggetto funzione C++ in Python e passarlo all'algoritmo C++? E.g. quando chiamo
f = WrappedCPPGaussianFunctionClass(sigma=0.5)
WrappedCPPAlgorithm(f)
in Python, sarebbe restituire un puntatore ad un oggetto C++ che sarebbe poi passato a un C++ di routine che richiedono un tale puntatore, o qualcosa di simile ... (non mi chiedere di memoria gestione in questo caso, però: S)
il punto è che non callback occorre a Python codice nell'algoritmo. In seguito vorrei estendere questo esempio per fare anche un po 'di parsing di espressioni semplici sul lato Python, come somma o prodotto di funzioni, e restituire un composto, parse-tree come l'oggetto C++ ma per ora rimango ai concetti di base.
Ci scusiamo per il post lungo e per i suggerimenti in anticipo.