2014-01-29 36 views
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

+1

'numinputs = 0'不會忽略輸入,它確保根本沒有任何東西,所以在argout中沒有什麼可以替代'$ input'。你想要的東西的聲音就像我以前沒有'numinputs = 0'的例子,但是從「in」typemap中移除了for循環。 – Flexo

+0

我會在稍後有更多時間寫完整的答案,如果沒有其他人打我的話。 – Flexo

+0

沒關係,我知道了。我想這裏的牛肉和手冊一樣。該手冊完全不清楚和誤導,關於如何輸出結果,而不是打印輸出,但填補了「外露」的論點。例如,手冊明確指出$ input可用於argout typemap。錯誤的是,它不可用,如果還有匹配的(in,numinputs = 0)typemap。 –

回答

0

好的我想通了。我想這裏的牛肉和手冊一樣。手冊沒有說,如何輸出結果,不是打印輸出,而是填充「輸出」參數。例如,手冊明確指出$ input可用於argout typemap。錯誤的是,它不可用,如果還有一個匹配的(in,numinputs)typemap。

相關問題