如何使用 PERL XS 调用 C++接受 STL Vector 的函数
我一直在使用 PerlXS 围绕 C++ 对象编写 Perl 包装器。通常我的 fcn 接受 string/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> >'
I have been using PerlXS to write a perl wrapper around a C++ Object. Usually my fcn takes in a string/int etc and I can just make them with no problem. I just write code like this in the .xs file
MyClass::func_a(std::string a, int b);
This time; I have a need to have a function that takes in a stl vector
MyClass::func_a(std::vector<std::string> vector)
I get this error:
conversion from `SV*' to non-scalar type
`std::vector<std::string, std::allocator<std::string> >'
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您不能直接调用采用 STL 容器的 Native 函数。您应该编写一个包装器并将 SV* 手动转换为 STL 容器。
如果您不知道如何执行此操作(就像我一样),请尝试使用 SWIG http://www.swig。 org/
它可以为本机函数生成包装器,以便从脚本语言(包括 PERL 和 XS-generator)使用它。 SWIG 的代码不是很漂亮,也有一些限制,但它是编写包装器的简单方法。
SWIG 对 STL 内置支持有限: http://www.swig.org/ Doc1.3/Library.html#Library_stl_cpp_library
另外,要使用 PerlXS 和向量,请检查此线程 http://www.mail-archive.com/[电子邮件受保护]/msg00623.html< /a>
You can't directly call the Native function which takes a STL container. You should write a wrapper and convert SV* manually to STL container.
If You don't know how to do this (like I was), try to use SWIG http://www.swig.org/
It can generate wrappers for a native funciton to use it from scripting languages (including PERL and XS-generator). The code from SWIG is not a very beautiful, also it has some limitations, but it is the easy way to write a wrapper.
SWIG has a limited support of STL builtin: http://www.swig.org/Doc1.3/Library.html#Library_stl_cpp_library
Also, for using PerlXS and vectors, check this thread http://www.mail-archive.com/[email protected]/msg00623.html
查看 XS++。
一些链接:
我在 YAPC::EU 关于 XS++ 的演讲的幻灯片
参考文档
有关如何在 CPAN 发行版中使用的说明
Check out XS++.
Some links:
Slides for my talk at YAPC::EU on XS++
The reference docs
Instructions on how to use in a CPAN distribution