Domanda

Sto lavorando su un progetto di C ++ con un gran numero di classi (150+), ognuno dei quali ha da 10 a 300 campi o giù di lì. Mi piacerebbe davvero essere in grado di fornire un'interfaccia di scripting a scopo di test in modo che posso codice callback che non richiedono alcuna ri-compilazione. Mi piacerebbe farlo in Lua dato che sono più familiarità con le sue API C di me con Python di, ma se farà risparmiare mal di testa Sarei felice di farlo in Python.

Ho una solida comprensione su come richiamare le funzioni Lua dal mio C ++ e viceversa, e so come passare i tipi di dati di base avanti e indietro. La domanda che ho è come condividere i tipi di dati specificati dall'utente tra i due utilizzando SWIG.

Per esempio, ad un certo punto della mia C ++, potrei voler valutare un paio di pezzi di dati membro in un oggetto che dispone di 250 campi. Mi piacerebbe essere in grado di mano quell'oggetto fuori per Lua che potrebbe quindi (si spera?) Utilizzare i wrapper SWIG generati per manipolare l'oggetto, visualizzare alcuni campi, e quindi passare il (potenzialmente cambiato) oggetto Torna alla C ++ per uso continuato .

Vorrei anche essere in grado di creare un'istanza dell'oggetto in Lua usando gli involucri e farlo passare a C ++ per essere usato come una versione normale C ++ dell'oggetto.

È possibile? Potrebbe qualcuno mi punto verso un tutorial o un esempio esplicito?

Grazie per tutto l'aiuto che si può offrire!

È stato utile?

Soluzione

Fino a quando si avvolgono i vostri tipi definiti dall'utente utilizzando interfacce Swig (vedi qui per la documentazione su Swig-Lua API), l'interazione dovrebbe essere senza soluzione di continuità. Gli involucri Swig fornita consente di effettuare istanze nuovi oggetti, li passa lungo per C ++ e viceversa.

Non credo che Swig-Lua involucro supporta ancora le classi direttore, il che significa che l'estensione classi esistenti, li istanziare e li passa di nuovo a C ++ non è possibile. Amministratori sono supportati per linguaggi come Python, Java, C # però.

Altri suggerimenti

Se sorso ti dà problemi, ho avuto buona fortuna con l'ultima versione di tolua ++, che è per il solo scopo di legare C ++ e Lua. Si richiede un file .h modificato come input, che è un po 'noioso, ma non più di moduli di Swig. Non ho alcun motivo per preferire uno sopra l'altro, ma è bene sapere su entrambi.

Si dovrebbe anche verificare Luabind. Questo implementa OOP per Lua e può mappare le classi ei tipi di dati da Lua torna a C ++.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top