3

我一直在使用 PerlXS 围绕 C++ 对象编写 perl 包装器。通常我的 fcn 接受一个字符串/整数等,我可以毫无问题地制作它们。我只是在 .xs 文件中编写这样的代码

MyClass::func_a(std::string a, int b);

这次; 我需要一个接收 stl 向量的函数

MyClass::func_a(std::vector<std::string> vector)

我收到此错误:

conversion from `SV*' to non-scalar type 
  `std::vector<std::string, std::allocator<std::string> >'
4

2 回答 2

4

您不能直接调用采用 STL 容器的 Native 函数。您应该编写一个包装器并将 SV* 手动转换为 STL 容器。

如果您不知道该怎么做(就像我一样),请尝试使用 SWIG http://www.swig.org/

它可以为本地函数生成包装器,以便从脚本语言(包括 PERL 和 XS 生成器)中使用它。SWIG 的代码不是很漂亮,也有一些限制,但它是编写包装器的简单方法。

SWIG 对内置 STL 的支持有限:http ://www.swig.org/Doc1.3/Library.html#Library_stl_cpp_library

此外,对于使用 PerlXS 和向量,请查看此线程http://www.mail-archive.com/perl-xs@perl.org/msg00623.html

于 2010-12-18T04:37:18.140 回答
2

查看 XS++。

一些链接:

我在 YAPC::EU 在 XS++ 上的演讲幻灯片

参考文档

关于如何在 CPAN 分发中使用的说明

于 2010-12-18T21:36:49.907 回答