swig 对基类“std::string”一无所知,被忽略
Posted
技术标签:
【中文标题】swig 对基类“std::string”一无所知,被忽略【英文标题】:swig Nothing known about base class 'std::string', ignored 【发布时间】:2013-12-16 02:55:13 【问题描述】:我正在尝试使用 swig 围绕 c++ 库构建 ruby 包装器。 大部分似乎都在工作,但我有一个问题我很确定与上述警告有关。
看起来我要包装的类之一是从 std::string 继承的。
我在运行 swig 时看到上述警告消息。
当我在 ruby 中调用应该返回字符串的对象上的方法时,我看到了这个
SWIG::Type_p_std__string:0x.....
我想我需要一些如何解决上述警告的问题,有什么想法吗?
【问题讨论】:
我认为您需要%include "std_string.i"
,然后您的课程才能被 swig 处理。
但是该文件会包含什么?我试图包括 SWIG 抱怨它不知道 std::string 类,因此无法为其生成代码。
SWIG 库 std_string.i 具有用于将 c++ 字符串映射到目标语言字符串类的语言特定代码。在生成类的代码之前添加%include "std_string.i"
之前应该可以修复错误。
请注意,%include
与 swig 接口文件中的 #include
不同。
【讨论】:
Gah ...我尝试了以下操作:%include "std_string.i"
、%include std_string.i
和 `%include 当您在 SWIG 输出中看到 SWIG::Type_p_std__string 或类似的神秘类型时,这意味着缺少类型映射。在这里,SWIG 需要导出 std::string。通常这是因为它在函数调用参数中使用或作为您正在导出的函数中的返回值;在您的情况下,这是因为 std::string 是一个基类。 SWIG 包含一个用于常用 STL 类(如字符串和向量)的类型映射“库”,您只需通过 %include 指令导入它。有关 SWIG 中包含的其他 .i,请参阅 http://www.swig.org/Doc2.0/Library.html。
【讨论】:
以上是关于swig 对基类“std::string”一无所知,被忽略的主要内容,如果未能解决你的问题,请参考以下文章
[swig-JavaScript] 是不是支持 std::vector<std::string>* 作为输出?
将 SWIG 与将 std::string 作为参数的方法一起使用