首页 > 解决方案 > 如何处理 python-sip 中的联合?

问题描述

我正在使用 SIP 版本 5.4.0 并且在 c++ 中为 python3.8 翻译结构没有问题。当我要翻译时,工会sip-install给了我一个syntax error. 有任何想法吗?

谢谢你的回答。

约翰尼

标签: c++11unionspython-sip

解决方案


诀窍是将它包装在一个结构中,并为每个联合元素使用 %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
    };
};

这个解决方案不是我的成就,但我不知道我是否可以命名。非常感谢你!

约翰尼·沃克


推荐阅读