2009-09-30 37 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被分配。