Как получить доступ к вложенным членам профсоюза с помощью SWIG? - PullRequest
2 голосов
/ 06 июля 2011

У меня есть такая структура в 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, используя эту структуру (выизменить способ доступа к членам объединения).

Я думаю о двух возможностях:

  1. Добавить объявление переменной value, чтобы проблема swig была решена, но мне нужноспособ получить доступ к членам объединения непосредственно в C (чтобы не нарушать множество функций).Знаете ли вы один или несколько?

  2. Найдите другой способ в глотке.Вы знаете одно или несколько?

Любое другое решение приветствуется!

1 Ответ

0 голосов
/ 06 июля 2011

Мое предложение - ввести код C и SWIG двумя разными заголовочными файлами. Попробуйте этот код:

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

Когда вы запустите SWIG для создания кода JNI, замените /*SWIG_VALUE*/ на value. Это не должно изменять адреса полей, но сделает структуру более доступной для SWIG.

...