私はC++で書かれたクラスのセットを持っています。Perlスクリプトからそれらを呼び出すための最良の方法は何でしょうか?ありがとう。
3 に答える
私はSWIGが特に好きではなく、インターフェースコードを自分で書くことを好みます。Perlには、CまたはC++とのインターフェース用に「XS」と呼ばれる一種の疑似言語が付属しています。残念ながら、それを使用するには、少なくともC、Perlを知っている必要があります。次に、インタープリターAPIについても学ぶ必要があります。すでにPerlとCをよく知っているなら、それはそれほど大きなステップではありません。XSに関する次のコアドキュメントをご覧ください。
さらに、インターネット上にはたくさんのチュートリアルとハウツーがあります。
現在、XSを使用してC ++に接続するには、いくつかの追加手順が必要です。最初に解決するのは少しイライラするかもしれませんが、それを手に入れるときちんと所定の位置に落ちます。この点で、コアドキュメントはせいぜいまばらです。しかし、すべてが失われるわけではありません。Perl用のwxWidgetsバインディングの作成者であるMattiaBarbonは、これをほぼ完全に単純(またはXSと同じくらい単純)にする優れたツール「XS++」を作成しました。これはWxに含まれていますが、独自のディストリビューションへの分割に取り組んでいます。これは進行中の作業です。MattiaのXS++コードと私の修正バージョンはgithubにあります。
スタンドアロンのXS++のCPANへのリリースを除いて、他のリソースからC++用のXSを作成する方法を学ぶことをお勧めします。
- かなり昔に、JohnKeizerはXSとC++に関する優れたチュートリアルを作成しました。また、便利なツールやドキュメントへのポインタも含まれています。
- そのチュートリアルとCPANで見つけたいくつかの例からXS&C++を学びました。その時見たものを思い出せない。しかし今、私は自分の仕事を(良いか悪いか、わかりません)例として指摘することができます:Math :: SymbolicX::FastEvaluator。
- 同様に、計画されているXS ++ディストリビューションには、XS++を使用してC++とPerlをインターフェースする完全な(無意味ではありますが)例が含まれています。XS ++はプレーンXSに変換されるため、これを使用して例を生成できます。
PS:Inline::CPPモジュールもあります。それがうまくいくなら、それはおそらく最も簡単な解決策です。ただし、テンプレートを処理できるとは思えません。
http://www.swig.orgを確認してください:
「SWIGは、CおよびC ++で記述されたプログラムをさまざまな高級プログラミング言語と接続するソフトウェア開発ツールです。SWIGは、Perl、PHP、Python、Tcl、Rubyなどの一般的なスクリプト言語を含むさまざまな種類の言語で使用されます。」
私は通常、tseeのようにXSを選択しますが、Inline :: C(またはこの場合はInline :: CPP )もあります。私はSWiGが嫌いで、SWiGを中心に構築されたパッケージを避ける傾向があります。