如何用swig将c++int**返回值类型映射到python

2024-10-05 12:59:50 发布

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

以下是我的代码:

int** myfunction()
{
    int **value = new int*[4];
    for(int i=0;i<4;i++)
    {
        value[i] = new int[4];
        memset(value[i], 0, 4*sizeof(int));
    }
    // asign value

    return value;
}

然后我要调用myfunction并用python列表返回int **类型值,因此我在.i文件中添加了一个类型映射:

^{pr2}$

我在python代码中调用myfunction,但什么都没有得到。我的代码有什么不正确的?在


Tags: 文件代码类型列表newforreturnvalue
1条回答
网友
1楼 · 发布于 2024-10-05 12:59:50

除了内存泄漏(只删除了外部的new,而不是内部的),您的代码看起来很好。我是这样做的:

测试。i

%module test

%typemap(out) int** {
    $result = PyList_New(4);
    for(int i=0;i<4;i++)
    {
        PyObject *o = PyList_New(4);
        for(int j=0;j<4;j++)
        {
            PyList_SetItem(o,j,PyInt_FromLong((long)$1[i][j]));
        }
        delete [] $1[i];
        PyList_SetItem($result, i, o);
    }
    delete [] $1;
}

%inline %{
int** myfunction()
{
    int **value = new int*[4];
    for(int i=0;i<4;i++)
    {
        value[i] = new int[4];
        for(int j=0;j<4;j++)
            value[i][j] = i*4+j;
    }

    return value;
}
%}

使用SWIG和VS2015编译器构建:

^{pr2}$

输出:

^{3}$

相关问题 更多 >

    热门问题