Ho un set di classi scritte in C++. Quale sarebbe il modo migliore per chiamarli da uno script Perl? Grazie.Come posso usare una classe C++ da Perl?
risposta
Non sono particolarmente appassionato di SWIG e preferisco scrivere da solo il codice di interfaccia. Perl viene fornito con una sorta di pseudo linguaggio chiamato 'XS' per l'interfacciamento con C o C++. Sfortunatamente, per poterlo usare, è necessario conoscere almeno C, Perl, e poi imparare qualcosa anche sull'API dell'interprete. Se conosci già bene Perl e C, non è il tale un grande passo. Date un'occhiata ai seguenti documenti fondamentali su XS:
Inoltre, c'è un sacco di tutorial e how-to su internet.
Ora, l'interfacciamento a C++ tramite XS richiede alcuni passaggi aggiuntivi. All'inizio può essere un po 'frustrante allenarsi, ma dopo averlo capito, si adatta perfettamente. A questo proposito, la documentazione di base è scarna al meglio. Ma non tutto è perduto. Mattia Barbon, il creatore dei binding wxWidgets per Perl, ha scritto un ottimo strumento "XS ++" che rende questo quasi quasi semplice (o semplice come XS). È incluso in Wx, ma stiamo lavorando per suddividerlo nella sua distribuzione. Questo è un lavoro in corso. Puoi trovare Mattia's XS++ code e un modified version of mine su github.
A meno di un rilascio di una XS standalone ++ per CPAN, vorrei suggerire di imparare a scrivere XS per C++ da altre risorse:
- Molto molto tempo fa, John Keiser ha scritto un eccellente tutorial on XS and C++. Include inoltre ulteriori indicazioni su strumenti e documentazione utili.
- Ho imparato XS & C++ da quel tutorial e alcuni esempi che ho trovato su CPAN. Non ricordo cosa ho visto allora. Ma ora posso indicare il mio lavoro come esempio (buono o cattivo, non so): Math::SymbolicX::FastEvaluator.
- Analogamente, la distribuzione XS ++ pianificata contiene un complete (albeit pointless) example di utilizzo di XS ++ per interfacciare C++ e Perl. Poiché XS ++ è tradotto in semplice XS, è possibile utilizzarlo su generare esempi.
PS: C'è anche il modulo Inline :: CPP. Se funziona, è probabilmente la soluzione più semplice. Dubito che possa gestire i modelli, però.
Controllare http://www.swig.org:
"SWIG è uno strumento di sviluppo software che collega i programmi scritti in C e C++ con una varietà di alto livello linguaggi di programmazione SWIG è usato con diversi tipi di linguaggi. compresi i linguaggi di scripting comuni come Perl, PHP, Python, Tcl e Ruby. "
Normalmente sceglierei XS, come tsee, ma c'è anche Inline::C (o Inline::CPP in questo caso).Non mi piace SWiG e tendono ad evitare i pacchetti costruiti attorno ad esso.
- 1. Come posso usare librerie Perl da PHP?
- 2. Come posso creare una classe Perl?
- 3. Chiama una classe java da perl
- 4. Come posso usare una libreria C++ da node.js?
- 5. Restituisce un oggetto perl da una diversa classe perl a C# usando PerlNET
- 6. Come posso usare la classe C++ in Python?
- 7. Come usare una libreria C da D?
- 8. Posso utilizzare una classe C++ in classe Python come superclasse
- 9. in C++, posso ricavare una classe da una struct
- 10. Come posso creare un qr // in Perl 5.12 da C?
- 11. Come posso usare un codice ref come callback in Perl?
- 12. Come posso usare la variabile array predefinita Perl @_ con push?
- 13. In Symfony, come posso usare url_for helper in una classe?
- 14. Come posso usare "s" come delimitatore di sostituzione in Perl?
- 15. Come posso estrarre sottostringhe da una stringa in Perl?
- 16. Come posso rimuovere "\ r \ n" da una stringa in C#? Posso usare un regEx?
- 17. Posso usare la parola chiave `abstract` nella classe C++
- 18. Come posso usare condizionatamente un modulo in Perl?
- 19. Come usare fork() in Perl?
- 20. Come posso includere dinamicamente i moduli Perl senza usare eval?
- 21. Come posso installare il modulo Perl senza usare CPAN.pm?
- 22. Come posso usare numeri interi di lunghezza arbitraria in Perl?
- 23. Come posso serializzare una chiusura in Perl?
- 24. C++ - quando dovrei usare un membro pointer in una classe
- 25. Come posso usare C++ con Objective-C in XCode
- 26. C# classe statica perché usare?
- 27. Usare C++ CLI classe template in C#
- 28. Come posso implementare una classe C++ in Python, per essere chiamata da C++?
- 29. Come posso creare dinamicamente classi derivate da una classe base
- 30. Come posso ereditare una classe personalizzata da più superclassi?
Ho dimenticato un piccolo dettaglio: il tutorial di John Keizer ha un link alla directory CPAN di Dean Roehrich. Il collegamento è verso uno specchio CPAN stantio. Prova questo: http://search.cpan.org/CPAN/authors/id/DMR/ – tsee
XS ++ è stato rilasciato come ExtUtils :: XSpp a CPAN: http://search.cpan.org/dist/ExtUtils-XSpp È ancora ai suoi esordi, ma con esso ho costruito con successo Wx.pm. – tsee