我该如何在Perl中使用C++类?

14

我有一组用C++编写的类。从Perl脚本中调用它们的最佳方法是什么?谢谢。

3个回答

16

我不太喜欢使用SWIG,更喜欢自己编写接口代码。Perl带有一种伪语言称为'XS',用于与C或C++进行接口交互。不幸的是,要使用它,您需要至少了解C、Perl,并学习一些关于解释器API的知识。如果您已经很熟悉Perl和C,那么这并不是一个大的难题。请参阅以下核心文档关于XS的内容:

  1. perlxstut (XS教程)
  2. perlxs (XS参考)
  3. perlapi (解释器API)

此外,网络上还有许多教程和指南。

现在,使用XS与C++进行接口交互需要一些额外的步骤。起初,可能会有点令人沮丧,但一旦掌握,就会变得简单明了。在这方面,核心文档的可用性最佳。但一切都没有丧失。wxWidgets的Perl绑定程序创建者Mattia Barbon编写了一个很棒的工具"XS++",使这变得非常简单(或者像XS一样简单)。它包含在Wx中,但我们正在努力将其拆分为自己的发行版。这是正在进行的工作。您可以在github上找到Mattia的XS++代码和我修改过的版本

除了独立发布XS++到CPAN外,我建议从其他资源学习如何使用XS编写C ++:

  • 相当长的时间以前,约翰·凯撒写了一篇关于 XS 和 C++ 的优秀教程。它还包括指向有用工具和文档的进一步指针。
  • 我从那个教程和我在 CPAN 上找到的一些示例中学习了 XS&C++。我不记得当时我看了什么。但现在我可以把自己的作品 Math::SymbolicX::FastEvaluator 作为(好或坏,我不知道)示例。
  • 同样地,计划中的 XS++ 发行版包含一个完整(虽然毫无意义)的示例,演示如何使用 XS++ 连接 C++ 和 Perl。由于 XS++ 被转换为普通的 XS,您可以使用它来生成示例。

PS:还有 Inline::CPP 模块。如果它能正常工作,那可能是最简单的解决方案。但我怀疑它不能处理模板。


忘记提到一个小细节:John Keiser的教程中有一个指向Dean Roehrich的CPAN目录链接。该链接指向一个过时的CPAN镜像。请改用此链接:http://search.cpan.org/CPAN/authors/id/DMR/。 - tsee
XS++已经作为ExtUtils :: XSpp发布到CPAN:http://search.cpan.org/dist/ExtUtils-XSpp 它仍处于早期阶段,但我已经成功地使用它构建了Wx.pm。 - tsee

10

请查看http://www.swig.org

“SWIG是一个软件开发工具,它能够将用C和C++编写的程序与多种高级编程语言连接起来。SWIG可用于包括Perl、PHP、Python、Tcl和Ruby在内的不同类型的语言。”


7

通常我会选择XS,就像tsee一样,但在这种情况下还有Inline::C(或Inline::CPP)。我不喜欢SWiG,并且倾向于避免围绕它构建的软件包。


2
OP可能想要使用Inline::CPP。 - runrig
当然是真的。我个人甚至没有意识到这一点。 - jettero
1
+1 Inline 模块确实使将外部代码集成到 Perl 中变得更加容易。 - mob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接