我使用的是SIP5.4.0版本,在c++中为python3.8翻译一个结构没有问题。当我想翻译一个联盟时,sip-install会给我一个syntax error。有什么想法吗?
谢谢你的答复。
约翰尼
发布于 2020-12-10 00:36:36
诀窍是将其包装在一个结构中,并为每个联合元素使用%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
};
};这个解决方案不是我的成就,但我不知道我是否能说出名字。非常感谢!
约翰尼·沃克
https://stackoverflow.com/questions/64872371
复制相似问题