如何使用 PERL XS 调用 C++接受 STL Vector 的函数

发布于 2024-10-08 09:03:06 字数 432 浏览 2 评论 0原文

我一直在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

征﹌骨岁月お 2024-10-15 09:03:06

您不能直接调用采用 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文