首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python-sip中处理联合?

如何在python-sip中处理联合?
EN

Stack Overflow用户
提问于 2020-11-17 17:16:09
回答 1查看 38关注 0票数 0

我使用的是SIP5.4.0版本,在c++中为python3.8翻译一个结构没有问题。当我想翻译一个联盟时,sip-install会给我一个syntax error。有什么想法吗?

谢谢你的答复。

约翰尼

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-10 00:36:36

诀窍是将其包装在一个结构中,并为每个联合元素使用%GetCode和%SetCode。下面的例子应该会让事情变得清晰起来:

下面是头文件:

代码语言:javascript
复制
union test_u {
    char test1;
    int test2;
    double test3;
};

使用此SIP文件进行翻译:

代码语言:javascript
复制
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
    };
};

这个解决方案不是我的成就,但我不知道我是否能说出名字。非常感谢!

约翰尼·沃克

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64872371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档