2009-09-30 34 views
1

我用C++編寫具有以下兩個方法Publisher類:使用SWIG產生如何定義指針的引用的SWIG類型映射?

PublishField(char* name, double* address); 
GetFieldReference(char* name, double*& address); 

此類Python綁定。在我痛飲.i文件我有以下幾點:

%pointer_class(double*, ptrDouble); 

這讓我發佈在一個Python變量定義一個字段:

value = ptrDouble() 
value.assign(10.0) 
PublishField("value", value.cast()) 

試圖利用然而在一個TypeError的GetFieldReference方法結果:

GetFieldReference("value", newValue) 

我想我需要爲雙* &返回一個ptrDouble類型表,但我不能肯定那將是什麼樣子。

回答

1

這是我想出的一個工作解決方案。

添加一個包裝函數的swig.i文件:

%inline %{ 
    double * GetReference(char* name, Publisher* publisher) 
    { 
     double* ptr = new double; 
     publisher->GetFieldReference(name, ptr); 
     return ptr; 
    } 
%} 
在Python

現在我可以使用以下命令:

value = ptrDouble.frompointer(GetFieldReference("value", publisher) 
0

此類型映射應該解決的問題 -

// Typemaps for double *& 
%typemap(in) double *& (double *ppDouble = NULL) %{ 
$1 = &ppDouble ; 
%} 

%typemap(argout) double *& { 
*(double **)&jarg2 = *$1; 
} 

%typemap(javain) double *& "$javainput" 

您可能需要檢查是否將具有所需double值的jarg2(在'argout'typemap中)分配正確或jarg1守護ld被分配。