【发布时间】: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