如何使用PERL XS来调用接收STL向量的C ++函数

时间:2010-12-18 04:23:04

标签: c++ perl xs

我一直在使用PerlXS在C ++对象周围编写一个perl包装器。通常我的fcn接受一个字符串/ int等,我可以让它们没有问题。我只是在.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> >'

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)