我一直在使用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> >'
答案 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)