swig - 如何在不更改结构名称的情况下重命名类扩展?

时间:2017-08-16 20:37:38

标签: python c swig

我想更改通过在swig中扩展C的结构而创建的函数的名称。

我尝试添加%rename (CreateVoxel) _voxel;%rename (CreateVoxel) ift_voxel;或将函数ift_voxel(int x, int y, int z)的名称更改为CreateVoxel(int x, int y, int z),但这些都不起作用。

我不知道该怎么办,我不允许更改我的结构名称。

这是我.i档案的一部分:

%module pyift

%{
#define SWIG_FILE_WITH_INIT
#include "ift.h"
%}

%include "numpy.i"
%fragment("NumPy_Fragments");

%init %{
    import_array();
%}

%rename("%(strip:[ift])s") "";

struct ift_voxel {
        int x, y, z;
};

%extend ift_voxel {
    char *__str__() {
        static char tmp[1024];
        sprintf(tmp, "[%d, %d, %d]", $self->x, $self->y, $self->z);
        return tmp;
    }
    ift_voxel(int x, int y, int z){
        iftVoxel *v = (iftVoxel *) malloc(1, sizeof(iftVoxel));
        v->x = x;
        v->y = y;
        v->z = z;
        return v;
    }
};

这是.h文件中的结构:

typedef struct ift_voxel {
    int x, y, z;
} iftVoxel;

当我想在python中使用这个结构时,我使用这个代码,但我想更改_voxel的名称:

import pyift as ift
v = ift._voxel(1, 1, 1)

应该是这样的:

import pyift as ift
v = ift.CreateVoxel(1, 1, 1)

0 个答案:

没有答案