如何处理 python-sip 中的联合?
How to handle a union in python-sip?
我使用的是 SIP 版本 5.4.0,在为 python3.8 翻译 c++ 结构时没有遇到任何问题。
当我想翻译一个 union sip-install
给我一个 syntax error
。
有什么想法吗?
感谢您的回答。
约翰尼
诀窍是将它包装在一个结构中,并为每个联合元素使用 %GetCode 和 %SetCode。
下面的例子应该很清楚:
以下头文件:
union test_u {
char test1;
int test2;
double test3;
};
与此 SIP 文件一起翻译:
struct union_wrapper /PyName=test_u/
{
%TypeHeaderCode
#include<test_union.h>
struct union_wrapper
{
union test_u wrapped_u;
};
%End
char test1 {
%GetCode
sipPy = PyUnicode_FromString(&(sipCpp->wrapped_u.test1));
%End
%SetCode
if (PyUnicode_Check(sipPy))
sipCpp->wrapped_u.test1;
else
sipErr = 1;
%End
};
int test2 {
%GetCode
sipPy = PyLong_FromLong(sipCpp->wrapped_u.test2);
%End
%SetCode
if (PyLong_Check(sipPy))
sipCpp->wrapped_u.test2;
else
sipErr = 1;
%End
};
double test3 {
%GetCode
sipPy = PyFloat_FromDouble(sipCpp->wrapped_u.test3);
%End
%SetCode
if (PyFloat_Check(sipPy))
sipCpp->wrapped_u.test3;
else
sipErr = 1;
%End
};
};
这个解决方案不是我的成果,不知道能不能说出名字。
非常感谢!
尊尼获加
我使用的是 SIP 版本 5.4.0,在为 python3.8 翻译 c++ 结构时没有遇到任何问题。
当我想翻译一个 union sip-install
给我一个 syntax error
。
有什么想法吗?
感谢您的回答。
约翰尼
诀窍是将它包装在一个结构中,并为每个联合元素使用 %GetCode 和 %SetCode。 下面的例子应该很清楚:
以下头文件:
union test_u {
char test1;
int test2;
double test3;
};
与此 SIP 文件一起翻译:
struct union_wrapper /PyName=test_u/
{
%TypeHeaderCode
#include<test_union.h>
struct union_wrapper
{
union test_u wrapped_u;
};
%End
char test1 {
%GetCode
sipPy = PyUnicode_FromString(&(sipCpp->wrapped_u.test1));
%End
%SetCode
if (PyUnicode_Check(sipPy))
sipCpp->wrapped_u.test1;
else
sipErr = 1;
%End
};
int test2 {
%GetCode
sipPy = PyLong_FromLong(sipCpp->wrapped_u.test2);
%End
%SetCode
if (PyLong_Check(sipPy))
sipCpp->wrapped_u.test2;
else
sipErr = 1;
%End
};
double test3 {
%GetCode
sipPy = PyFloat_FromDouble(sipCpp->wrapped_u.test3);
%End
%SetCode
if (PyFloat_Check(sipPy))
sipCpp->wrapped_u.test3;
else
sipErr = 1;
%End
};
};
这个解决方案不是我的成果,不知道能不能说出名字。 非常感谢!
尊尼获加