[swig-JavaScript] 是不是支持 std::vector<std::string>* 作为输出?
Posted
技术标签:
【中文标题】[swig-JavaScript] 是不是支持 std::vector<std::string>* 作为输出?【英文标题】:[swig-JavaScript]is it support std::vector<std::string>* as a OUTPUT?[swig-JavaScript] 是否支持 std::vector<std::string>* 作为输出? 【发布时间】:2016-01-12 09:32:09 【问题描述】:我用swig写NodeJS的插件,遇到了错误。
是否支持 std::vector* 作为输出?
我的 *.i:%apply std::vector<std::string> *OUTPUT std::vector<std::string>* result;
当我开始痛饮时:swig -javascript -node -c++ -DV8_VERSION=0x040599 export.i
有错误:export.i:19: Warning 453: Can't apply (std::vector< std::string > *OUTPUT). No typemaps are defined.
我在 swig-javascript 中遇到错误,但在 swig-python 中可以正常工作。
有人可以帮忙吗? 谢谢
【问题讨论】:
【参考方案1】:添加:
%include "std_string.i"
%include "std_vector.i"
namespace std
%template(StringVector) vector<string>;
在你的文件的早期似乎足以让它工作,例如。对于 C++ 类
class MyClass
public:
std::vector<std::string> getNames();
(...)
以下代码将在 Javascript 端运行:
var o = ...
a = o.getNames();
console.log("size: " + a.size());
for (i = 0; i < a.size(); i++)
console.log(a.get(i));
这适用于 SWIG 3,它的工作原理与 http://www.swig.org/Doc1.3/Library.html#Library_nn15 中记录的一样
【讨论】:
啊,刚刚意识到你的情况是函数返回一个指向 std::vector<:string> 的指针,而不是一个值......但我想它的工作原理类似(我不'为什么它不会)以上是关于[swig-JavaScript] 是不是支持 std::vector<std::string>* 作为输出?的主要内容,如果未能解决你的问题,请参考以下文章