Ich habe eine Reihe von Klassen in C++ geschrieben. Was wäre der beste Weg, sie von einem Perl-Skript aus aufzurufen? Vielen Dank.Wie kann ich eine C++ - Klasse von Perl verwenden?
Antwort
Ich mag SWIG nicht besonders gerne und schreibe lieber den Schnittstellencode selbst. Perl kommt mit einer Art Pseudo-Sprache namens 'XS' für die Schnittstelle zu C oder C++. Um es zu verwenden, müssen Sie leider mindestens C, Perl und dann etwas über die Interpreter-API wissen. Wenn Sie Perl und C schon gut kennen, ist es kein wie ein großer Schritt. Werfen Sie einen Blick auf die folgenden Kerndokumente auf XS:
Zusätzlich gibt es viele Tutorials und Anleitungen im Internet.
Jetzt erfordert die Anbindung an C++ mit XS einige zusätzliche Schritte. Es kann ein bisschen frustrierend sein, zuerst zu trainieren, aber es fügt sich ordentlich zusammen, sobald Sie es verstanden haben. In dieser Hinsicht ist die Kerndokumentation bestenfalls spärlich. Aber alles ist nicht verloren. Mattia Barbon, der Schöpfer der wxWidgets-Bindungen für Perl, hat ein großartiges Werkzeug "XS ++" geschrieben, das diese fast tot einfach macht (oder so einfach wie XS). Es ist in Wx enthalten, aber wir arbeiten daran, es in seine eigene Distribution aufzuteilen. Dies ist in Arbeit. Sie können Mattia's XS++ code und modified version of mine auf GitHub finden.
Release eines eigenständigen XS ++ zu CPAN Barring, würde ich vorschlagen lernen XS für C++ zu schreiben, aus anderen Quellen:
- vor langer Zeit recht, schrieb John Keiser eine ausgezeichnete tutorial on XS and C++. Es enthält auch weitere Hinweise auf nützliche Tools und Dokumentation.
- Ich lernte XS & C++ aus diesem Tutorial und einige Beispiele, die ich auf CPAN gefunden habe. Ich kann mich nicht erinnern, was ich damals angeschaut habe. Aber jetzt kann ich auf meine eigene Arbeit als ein (gut oder schlecht, ich weiß es nicht) Beispiel hinweisen: Math::SymbolicX::FastEvaluator.
- Ähnlich enthält die geplante XS ++ - Distribution eine complete (albeit pointless) example von XS ++ zu Schnittstelle C++ und Perl. Da XS ++ in XS konvertiert wird, können Sie es verwenden, um Beispiele zu generieren.
PS: Es gibt auch das Inline :: CPP-Modul. Wenn das funktioniert, ist es wahrscheinlich die einfachste Lösung. Ich bezweifle jedoch, dass es mit Vorlagen umgehen kann.
prüfen http://www.swig.org:
„SWIG ist ein Software-Entwicklungs-Tool die und C geschriebene Programme in C verbindet ++ mit einer Vielzahl von High-Level- Programmiersprachen SWIG verwendet wird mit verschiedenen Arten von Sprachen. einschließlich der gängigen Skriptsprachen wie Perl, PHP, Python, Tcl und Ruby. "
Ich würde normalerweise wählen XS, wie Tsee, aber es gibt auch Inline::C (oder Inline::CPP in diesem Fall).Ich mag SWiG nicht und tendiere dazu, Pakete zu vermeiden, die darum herum gebaut werden.
- 1. Wie erstelle ich eine Perl-Klasse?
- 2. Wie kann ich eine Variable als Modulname in Perl verwenden?
- 3. Wie kann ich eine Variable als Variablennamen in Perl verwenden?
- 4. Wie kann ich Perl-Bibliotheken von PHP verwenden?
- 5. Kann ich DeserializeWithLengthPrefix eine C# -Klasse in eine Python-Klasse?
- 6. Wie kann ich die C++ - Klasse in Python verwenden?
- 7. Rufen Sie eine Java-Klasse von Perl
- 8. C# Generische Klasse, wie kann ich öffentliche Eigenschaften der abgeleiteten Klasse von Typ Parameter verwenden?
- 9. Wie kann ich debugbreak() in C# verwenden?
- 10. Wie kann ich von Perl erzeugten Perl-Code verschönern?
- 11. in C++, kann ich eine Klasse von einer Struktur ableiten
- 12. Wie kann ich alle Methoden einer Klasse in Perl durchlaufen?
- 13. Wie kann ich ein neues Perl-Modul ohne Installationsberechtigungen verwenden?
- 14. Wie kann ich XML von Perl erstellen?
- 15. Kann ich eine Anwendungsbereichsvariable in Perl haben?
- 16. Wie kann Doxygen eine C++ Klasse ausschließen?
- 17. Wie kann ich eine eingebaute Klasse überklassifizieren?
- 18. Wie kann ich den Namespace für eine C# -Klasse finden?
- 19. Wie kann ich File :: Find in Perl verwenden?
- 20. Wie kann ich ein Modul in Perl bedingt verwenden?
- 21. Wie kann ich Integer beliebiger Länge in Perl verwenden?
- 22. Wie kann ich eine innere Klasse weiterleiten?
- 23. Wie kann ich eine rohe SNMP-Trap in Perl analysieren?
- 24. Wie kann ich Perl-Subroutinen inline?
- 25. Kann ich T4 programmgesteuert von C# verwenden?
- 26. Wie kann ich "s" als Ersatztrennzeichen in Perl verwenden?
- 27. Wie kann ich eine Anrufliste in Perl abrufen?
- 28. Kann ich `abstract` Schlüsselwort in C++ - Klasse verwenden
- 29. Wie kann ich eine Klasse deklarieren und ihre Member-Funktionen später in C++ verwenden?
- 30. kann ich eine C++ - Klasse auf Android-App erstellen?
Vergessen, ein kleines Detail zu erwähnen: John Keisers Tutorial hat einen Link zu Dean Roehrichs CPAN-Verzeichnis. Die Verbindung führt zu einem veralteten CPAN-Spiegel. Versuchen Sie dies stattdessen: http://search.cpan.org/CPAN/authors/id/DMR/ – tsee
XS ++ wurde als ExtUtils :: XSpp zu CPAN freigegeben: http://search.cpan.org/dist/ExtUtils-XSpp Es ist immer noch in den frühen Tagen, aber ich habe erfolgreich Wx.pm damit gebaut. – tsee