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以来,就支持联合