2011-07-06 14 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; 
    }; 
}; 

私はpythonバインディングをエクスポートするswigを使用しています。実際にこのようなネストされた労働組合をサポートしていないスイングが、変数宣言とそれはokです:

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

このソリューションは、実際に私にフィット、それはこの構造を使用してCコードの多くを壊すので、(あなたが変更されません組合員にアクセスする方法)。

私は2つの可能性を考える:SWIGの問題が解決されるように、value変数宣言を追加します

  1. が、私は(機能の多くを破壊しないように)Cに直接組合員にアクセスするための方法が必要です。あなたは1つ以上を知っていますか?

  2. swigで他の方法を見つける。あなたは1つ以上を知っていますか?

他の解決方法は歓迎です!

答えて

0

私の提案は、CコードとSWIGの2つの異なるヘッダーファイルを入力することです。このコードを試してください:あなたはJNIコードを作成するためのSWIGを実行すると、value/*SWIG_VALUE*/を置き換える

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

。これはフィールドのアドレスを変更すべきではありませんが、構造体がSWIGにアクセスしやすくなります。

+0

答えのおかげで、この1つは私のために働く。 –

関連する問題