14

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

4

3 回答 3

16

我不是特别喜欢 SWIG,而是更喜欢自己编写接口代码。Perl 带有一种称为“XS”的伪语言,用于连接 C 或 C++。不幸的是,为了使用它,您至少需要了解 C、Perl,然后还要了解一些有关解释器 API 的知识。如果您已经非常了解 Perl 和 C,那么这并不是很大的一步。在 XS 上查看以下核心文档:

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

此外,互联网上有很多教程和操作方法。

现在,使用 XS 连接到 C++ 需要一些额外的步骤。一开始锻炼可能有点令人沮丧,但一旦你得到它,就会整齐地落入到位。在这方面,核心文档充其量是稀疏的。但一切都没有丢失。Perl 的 wxWidgets 绑定的创建者 Mattia Barbon 编写了一个很棒的工具“XS++”,它使这变得非常简单(或像 XS 一样简单)。它包含在 Wx 中,但我们正在努力将其拆分为自己的发行版。这是正在进行的工作。你可以在 github 上找到Mattia 的 XS++ 代码我的修改版本。

除非将独立的 XS++ 发布到 CPAN,否则我建议从其他资源中学习为 C++ 编写 XS:

  • 很久以前,John Keizer 写了一篇关于 XS 和 C++ 的优秀教程。它还包括指向有用工具和文档的更多指针。
  • 我从那个教程和我在 CPAN 上找到的一些示例中学习了 XS&C++。我不记得我当时看了什么。但现在我可以指出我自己的工作是一个(好还是坏,我不知道)示例:Math::SymbolicX::FastEvaluator
  • 同样,计划中的 XS++ 发行版包含一个使用 XS++ 连接 C++ 和 Perl的完整(尽管毫无意义)示例。由于 XS++ 被翻译成普通的 XS,您可以使用它来生成示例。

PS:还有 Inline::CPP 模块。如果可行,它可能是最简单的解决方案。不过,我怀疑它是否可以处理模板。

于 2009-06-01T16:55:16.440 回答
10

检查http://www.swig.org

“SWIG 是一种软件开发工具,它将用 C 和 C++ 编写的程序与各种高级编程语言连接起来。SWIG 用于不同类型的语言,包括常见的脚本语言,如 Perl、PHP、Python、Tcl 和 Ruby。”

于 2009-06-01T07:40:52.010 回答
7

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

于 2009-06-01T18:13:17.230 回答