我在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
绑定。实际上swing不支持这样的嵌套联合,但是使用变量声明就可以了:
union {
struct print_arg_atom atom;
struct print_arg_field field;
...
} value;
这个解决方案实际上并不适合我,因为它使用这个结构打破了很多C代码(你改变了访问union成员的方式)。
我想到两种可能性:
添加value
变量声明,因此解决了swig问题,但我需要一种直接在C中访问union成员的方法(不破坏许多函数)。你知道一个或多个吗?
在swig中找到另一种方式。你知道一个或多个吗?
欢迎任何其他解决方案!
答案 0 :(得分:0)
我的建议是为C代码和SWIG提供两个不同的头文件。试试这段代码:
union {
struct print_arg_atom atom;
struct print_arg_field field;
...
} /*SWIG_VALUE*/;
运行SWIG创建JNI代码时,请将/*SWIG_VALUE*/
替换为value
。这不应该改变字段的地址,但它将使SWIG更容易访问该结构。