如何使用SWIG访问嵌套的联合成员?
我在C语言中有这样一个结构:
struct print_arg {
struct print_arg *next;
enum print_arg_type type;
union {
struct print_arg_atom atom;
struct print_arg_field field;
struct print_arg_typecast typecast;
struct print_arg_flags flags;
struct print_arg_symbol symbol;
struct print_arg_func func;
struct print_arg_string string;
struct print_arg_op op;
struct print_arg_dynarray dynarray;
};
};
我正在使用swig
来导出python
的绑定。不过,实际上swig不支持像这样嵌套的联合体,但如果加一个变量声明就可以了:
union {
struct print_arg_atom atom;
struct print_arg_field field;
...
} value;
这个解决方案对我来说不太合适,因为它会破坏很多使用这个结构的C代码(你改变了访问联合体成员的方式)。
我想到了两种可能性:
添加
value
变量声明,这样swig的问题就解决了,但我需要一种方法在C中直接访问联合体成员(以免破坏很多函数)。你知道有没有这样的办法?在swig中找到其他方法。你知道有没有这样的办法?
任何其他解决方案都欢迎提出!
1 个回答
1
我的建议是给C代码和SWIG提供两个不同的头文件。你可以试试这个代码:
union {
struct print_arg_atom atom;
struct print_arg_field field;
...
} /*SWIG_VALUE*/;
当你运行SWIG来生成JNI代码时,把/*SWIG_VALUE*/
替换成value
。这样做应该不会改变字段的地址,但会让SWIG更容易访问这个结构。