如何为指针引用定义SWIG类型映射?

2024-10-01 13:28:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个C++类,用以下两种方法编写:

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

这个类的Python绑定是使用SWIG生成的。在我的swig.i文件中,我有以下内容:

^{pr2}$

这使我可以发布在Python变量中定义的字段:

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

尝试使用GetFieldReference方法会导致TypeError:

GetFieldReference("value", newValue)

我想我需要为double*创建一个typemap,它返回一个ptrDouble,但我不太确定它是什么样子。在


Tags: 文件方法name定义valueaddressswigdouble
2条回答

这是我想出的一个可行的解决方案。在

向swig.i文件添加包装函数:

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

现在从Python我可以使用以下命令:

^{2}$

这个类型图应该能解决问题-

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

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

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

您可能需要检查为jarg2(在“argout”typemap中)分配所需的双精度值是否正确,或者是否应该指定jarg1。在

相关问题 更多 >