gpt4 book ai didi

python - 如何使用 SWIG 访问嵌套的 union 成员?

转载 作者:太空宇宙 更新时间:2023-11-04 00:09:39 24 4
gpt4 key购买 nike

我在 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 绑定(bind)。实际上 swing 不支持这样的嵌套 union ,但是使用变量声明就可以了:

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

这个解决方案实际上不适合我,因为它破坏了很多使用这个结构的 C 代码(你改变了访问 union 成员的方式)。

我想到了两种可能:

  1. 添加 value 变量声明,这样 swig 问题就解决了,但我需要一种直接在 C 中访问 union 成员的方法(以免破坏很多函数)。你知道一个或多个吗?

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

欢迎任何其他解决方案!

最佳答案

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

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

当您运行 SWIG 以创建 JNI 代码时,将 /*SWIG_VALUE*/ 替换为 value。这不应更改字段的地址,但会使结构更易于 SWIG 访问。

关于python - 如何使用 SWIG 访问嵌套的 union 成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6597769/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com