c++11 - 如何处理 python-sip 中的联合?
问题描述
我正在使用 SIP 版本 5.4.0 并且在 c++ 中为 python3.8 翻译结构没有问题。当我要翻译时,工会sip-install
给了我一个syntax error
. 有任何想法吗?
谢谢你的回答。
约翰尼
解决方案
诀窍是将它包装在一个结构中,并为每个联合元素使用 %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
};
};
这个解决方案不是我的成就,但我不知道我是否可以命名。非常感谢你!
约翰尼·沃克
推荐阅读
- node.js - VSCode:Express pathing 打破了 ThreeJS 的 Intellisense
- java - 为什么 List#indexOf 在没有元素匹配时返回 -1...?
- scala - 导入下载的 github 项目(scala)时出错?
- r - 如何从 xgboost 模型的 sparse.model.matrix 中过滤掉特征
- traefik - 在给定路径上使用带有 Traefik 的 Web 服务器应用程序
- npm - 将第三方库导入 vue.js 上的特定页面
- c - 如果这个函数的结果是假的,是否有测试?(Unity C 单元测试)
- php - 如何在 PHP 中向多个收件人发送电子邮件
- php - 我正在尝试使用正则表达式在 Web url 中捕获数据
- python - 如何使用python连接到sqlite3数据库