【问题标题】:[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&lt;std::string&gt; *OUTPUT {std::vector&lt;std::string&gt;* result};
当我开始痛饮时:
swig -javascript -node -c++ -DV8_VERSION=0x040599 export.i
有错误:
export.i:19: Warning 453: Can't apply (std::vector&lt; std::string &gt; *OUTPUT). No typemaps are defined.

我在 swig-javascript 中遇到错误,但在 swig-python 中可以正常工作。

有人可以帮忙吗?
谢谢

【问题讨论】:

    标签: c++ node.js swig


    【解决方案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> 的指针,而不是一个值......但我想它的工作原理类似(我不'为什么它不会)
    猜你喜欢
    • 2020-07-14
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多