2011-07-06 18 views
2

我在C这样的结构:如何使用SWIG访问嵌套联合成员?

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绑定。其实摇摆不支持嵌套工会这样的,但有一个变量声明它是确定:

union { 
    struct print_arg_atom  atom; 
    struct print_arg_field  field; 
    ... 
} value; 

这种解决方案实际上不配合我,因为它打破了很多的C代码采用这种结构(您更改访问工会会员的方式)。

我想到两个可能性:

  1. 添加value变量声明,所以痛饮问题得到解决,但我需要一种方法来访问工会会员直接在C(不破坏大量的功能)。你知道一个或多个吗?

  2. 在swig中寻找其他方法。你知道一个或多个吗?

欢迎任何其他解决方案!

回答

0

我的建议是提供C代码和SWIG两个不同的头文件。试试这个代码:

union { 
    struct print_arg_atom  atom; 
    struct print_arg_field  field; 
    ... 
} /*SWIG_VALUE*/; 

当您运行SWIG创建JNI代码,用value更换/*SWIG_VALUE*/。这不应该改变字段的地址,但它会使结构更易于被SWIG访问。

+0

感谢您的回答,这一个适合我。 –