C++11 如何在python sip中处理联合? 我使用SIP版本5.4.0,在Python 3.8中没有对C++中的结构进行翻译。 当我想翻译unionsip安装时会给我一个语法错误。 有什么想法吗
谢谢你的回答C++11 如何在python sip中处理联合? 我使用SIP版本5.4.0,在Python 3.8中没有对C++中的结构进行翻译。 当我想翻译unionsip安装时会给我一个语法错误。 有什么想法吗,c++11,unions,python-sip,C++11,Unions,Python Sip,谢谢你的回答 Johnny诀窍是将其包装在一个结构中,并对每个联合元素使用%GetCode和%SetCode。 下面的例子应该说明问题: 以下头文件: union test_u { char test1; int test2; double test3; }; 将使用此SIP文件进行翻译: struct union_wrapper /PyName=test_u/ { %TypeHeaderCode #include<test_union.h> struc
Johnny诀窍是将其包装在一个结构中,并对每个联合元素使用%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
};
};
struct union\u包装器/PyName=test\u/
{
%打字头代码
#包括
结构联合包装器
{
联合试验;
};
%结束
字符测试1{
%获取代码
sipPy=PyUnicode_FromString(&(sipCpp->wrapped_.test1));
%结束
%设定码
如果(PyUnicode_检查(sipPy))
sipCpp->wrapped_.test1;
其他的
sipErr=1;
%结束
};
int test2{
%获取代码
sipPy=PyLong_FromLong(sipCpp->wrapped_.test2);
%结束
%设定码
如果(PyLong_检查(sipPy))
sipCpp->wrapped_.test2;
其他的
sipErr=1;
%结束
};
双重测试3{
%获取代码
sipPy=PyFloat\u FromDouble(sipCpp->wrapped\u.test3);
%结束
%设定码
如果(PyFloat_检查(sipPy))
sipCpp->wrapped_.test3;
其他的
sipErr=1;
%结束
};
};
这个解决方案不是我的成就,但我不知道我是否能说出名字。
多谢各位
约翰尼·沃克(Johnny Walker)根本没有提到工会,因此这就解释了语法错误:工会不受直接支持。我对SIP了解不够,无法提供任何替代方案;希望其他人也能加入进来。@Thomas谢谢您的快速浏览,我没有看到那个注释:自SIP版本6.0.0以来,就支持联合