【问题标题】:why does SWIG make illegal wrapper from in and argout typemaps?为什么 SWIG 从 in 和 argout 类型映射中制作非法包装器?
【发布时间】:2014-01-29 04:31:39
【问题描述】:

我正在尝试编写 argout SWIG 类型映射。

从这个界面foobar.i文件,这对我来说似乎完全合法:

%{
void f(int arg[2]) {}
%}

%typemap(in, numinputs = 0) int [ANY] {}

%typemap(argout) int arg[ANY] {
  PySequence_SetItem($input, 0, PyInt_FromLong(0));
}

void f(int arg[2]) {}

SWIG 编译了一个非法的 foobar_wrap.cxx 文件,因为它包含以下片段:

PySequence_SetItem(, 0, PyInt_FromLong(0));

什么都没有替换$input。如果我省略了in 类型映射,那么包装器是正确的。

为什么?

我只想忽略输入,并在输出上填充数组。 SWIG 手册明确表示使用numinputs=0

【问题讨论】:

  • numinputs=0 不只是忽略输入,它确保根本没有任何输入,因此在 argout 中没有任何东西可以替代 $input。你想要的东西就像我之前没有numinputs=0但从“in”类型映射中删除的for循环的例子。
  • 如果没有其他人超过我,我会在以后有更多时间时写一个完整的答案。
  • 没关系,我想通了。我想我在这里的牛肉是手册。该手册完全不清楚和误导,关于如何输出结果,而不是打印输出,而是填写“输出”参数。例如,手册明确指出 $input 可用于 argout 类型映射。错了,不可用,如果还有匹配的(in, numinputs=0) typemap。
  • Malek 你能发布一个答案来造福大家吗?
  • 手册在所有方面都很好,但如果您想澄清这一点,我相信他们会想要一个补丁。 (虽然当您了解 numinputs=0 的幕后情况时,这确实是有道理的 - 根本没有什么可以替代的)如果您将解决方案写成答案,我们也希望它。

标签: swig


【解决方案1】:

好的,我想通了。我想我在这里的牛肉是手册。手册没有说,如何输出结果,不是打印输出,而是填写“输出”参数。例如,手册明确指出 $input 可用于 argout 类型映射。错了,它不可用,如果还有一个匹配的 (in, numinputs) 类型映射。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2014-02-17
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    相关资源
    最近更新 更多