1
我想寫一個argout
SWIG typemap。爲什麼SWIG會從in和argout類型映射中創建非法包裝?
從這個接口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
typemap,那麼包裝是正確的。
爲什麼?
我只想忽略輸入,並填充輸出上的數組。 SWIG手冊明確表示要使用numinputs=0
。
'numinputs = 0'不會忽略輸入,它確保根本沒有任何東西,所以在argout中沒有什麼可以替代'$ input'。你想要的東西的聲音就像我以前沒有'numinputs = 0'的例子,但是從「in」typemap中移除了for循環。 – Flexo
我會在稍後有更多時間寫完整的答案,如果沒有其他人打我的話。 – Flexo
沒關係,我知道了。我想這裏的牛肉和手冊一樣。該手冊完全不清楚和誤導,關於如何輸出結果,而不是打印輸出,但填補了「外露」的論點。例如,手冊明確指出$ input可用於argout typemap。錯誤的是,它不可用,如果還有匹配的(in,numinputs = 0)typemap。 –