Sto scrivendo un'applicazione desktop multipiattaforma (OS X e Windows) in C ++ 11. Intendo utilizzare lo stesso core C ++ 11 su entrambe le piattaforme, utilizzando framework nativi per l'interfaccia utente (Cocoa e Objective-C su OS X e WPF e C # su Windows) poiché ritengo che la migliore esperienza UX sia nativa.
Attualmente l'applicazione viene eseguita come app per console su entrambe le piattaforme. L'applicazione esegue un lavoro intensivo della CPU e fornisce callback per la segnalazione dell'avanzamento e, quando completa, crea un'istanza di una raccolta di elementi ( std::vector<std::unique_ptr<Item>>
) che rappresenta i risultati dell'elaborazione.
Il mio obiettivo è che la libreria C ++ 11 funga da modello per l'interfaccia utente in un modo compatibile con i modelli MVC e MVVM.
L'interfaccia utente deve:
- Permetti all'utente di scegliere un file da elaborare (apri una finestra di dialogo file e invia il percorso del file alla libreria C ++)
- Visualizza lo stato di avanzamento (gestisci i callback dalla libreria C ++ per aggiornare una barra di avanzamento)
- Visualizza i risultati in un modulo WPF (accedi alla classe Item e visualizza le informazioni che fornisce)
Ho esaminato WinRT e sembra che non ci siano molte informazioni là fuori per l'uso nelle applicazioni desktop. Inoltre, non mi piace l'idea di creare l'interfaccia utente stessa in C ++. Il mio obiettivo è quello di ottenere dati dentro e fuori dall'app C ++ e utilizzare C # per gestire l'interfaccia utente poiché credo che sia un modo più efficiente di lavorare con WPF.
Sono a conoscenza di P / Invoke ma la mia comprensione è che funziona solo con un'interfaccia C. Creare una simile interfaccia attorno al C ++ 11 sembra complicato.
Sono anche a conoscenza di C ++ / CLI, ma non sono sicuro che soddisferà le mie esigenze o se è compatibile con C ++ 11.
Ho dato un'occhiata a CppSharp ma sembra essere un work-in-progress e dubito che saprei come per aggirare eventuali problemi che potrebbero sorgere.
Ho molta esperienza con C ++ e un po 'con C # ma non sono sicuro se mi mancano le opzioni migliori o quale dei precedenti è un approccio corretto.