swig 啥时候需要类型映射?

Posted

技术标签:

【中文标题】swig 啥时候需要类型映射?【英文标题】:When is a typemap necessary for swig?swig 什么时候需要类型映射? 【发布时间】:2011-07-19 08:09:44 【问题描述】:

我在.i文件中有这样的功能:

t_demo * t struct_new();

似乎我不需要任何类型映射,它就可以工作。 转换后可以直接使用:

use test;

$a = test::struct_new;

swig 什么时候需要 typemap?

【问题讨论】:

【参考方案1】:

例如,我们可以为 t_demo 创建“out”类型映射并返回填充了此结构的选定成员的哈希:

%typemap(out) t_demo 
  HV* tmp = newHV();

  SV* t_data = newSViv($1.int_field1);
  hv_store(tmp, "int_field1", 4, t_data, 0);

  $result = sv_2mortal(newRV_noinc((SV*) tmp));
  argvi++;

swig 手册中记录了更多用途。

【讨论】:

但是我可以通过访问器函数获取字段,对吗?所以这不是必需的...... “Typemaps 通常不是使用 SWIG 的必需部分”,但在某些边缘情况下可能需要这样做 - 例如没有访问器,也无法添加。 这是有道理的。顺便说一句,swig 的 -shadow 选项是否仅适用于 c++?我试图让它与 c 结构一起工作,但不工作......

以上是关于swig 啥时候需要类型映射?的主要内容,如果未能解决你的问题,请参考以下文章

如何定义 swig 类型映射以将 unsigned char* 返回到 java

如何为类类型创建 OUTPUT 类型映射?

SWIG:没有定义类型映射

SWIG——在扩展内使用类型映射

如何为指针引用定义 SWIG 类型映射?

类型映射资源并将列表转换为矢量(和返回)