将 CPP 定义移植到 python

Posted

技术标签:

【中文标题】将 CPP 定义移植到 python【英文标题】:porting CPP defines to python 【发布时间】:2012-02-23 09:20:49 【问题描述】:

我有一个充当套接字服务器的程序(用 C/C++ 编写)。我想用python编写客户端。通过 TCP 套接字交换的数据包遵循“自制”协议(简单),使用在 XXX.h 文件中定义为 #define... 的宏。 我想解析 XXX.h 文件以生成等效的 XXX.py XXX.h 文件仅包含 CPP 宏定义(和 cmets),例如:

//the following commands are used when talking to the server
//A tcp message is: the command(32bit word) followed by the flags (32 bits)
#define CMD_DO_SOMETHING1  1  //this does something
#define CMD_DO_SOMETHING2  2  //that does something else
 #define FLAG1   0x0001        //These flags are used as parameter in cmd2
 #define FLAG2   0x0002
 #define FLAG3   0x0004
 #define FLAG4   0x0008
 #define TEST_FLAG1(x) (x&FLAG1) //this tests for flag1

我想得到类似的东西:XXX.py:

CMD_DO_SOMETHING1=1
CMD_DO_SOMETHING2=2
 FLAG1=1
 ...
 def test_flag1(x):
    return(x&flag1)

我一直在看 swig,但不相信它真的达到了我想要的效果。手动解析XXX.h文件,匹配正则表达式感觉不对。在我的 *.py 文件上运行 CPP 的想法也是如此。 至少,常量定义应该被转换,所以我不必重写它们两次。 有更好的想法吗?

【问题讨论】:

Convert C++ Header Files To Python 的可能重复项 【参考方案1】:

h2py.py 正是这样做的。它包含在工具/脚本中的 Python 发行版(*)中

如果需要转换超过#defines,请看问题Convert C++ Header Files To Python

编辑:(*) 它至少包含在完整的源代码分发中。

【讨论】:

谢谢。我在我的机器(Fedora FC16)上找不到 h2py。 YUM 没有给我任何关于从哪里得到它的提示。尽管如此,我还是找到了源代码(复制/粘贴它),它做了我想要的。如果您知道我应该如何更“干净”地获得 h2py,请告诉我。并感谢您的回答。 @user1159290 我认为有一个单独的包 python-tools 用于 Fedora。但您不需要的只是脚本本身。【参考方案2】:

您为什么不使用宏预处理器来执行此操作?这就是他们的目的。

【讨论】:

以上是关于将 CPP 定义移植到 python的主要内容,如果未能解决你的问题,请参考以下文章

将 C++ 类移植到 PyQt

将 Psyco 移植到 64 位可能存在哪些缺陷?

将 nodejs 模块移植到 React Native:Object.prototype 未定义

ffmpeg系列之移植到安卓中调用

Pimpl with unique_ptr:为什么我必须将接口构造函数的定义移动到“.cpp”?

MAUI 移植 Xamarin.Forms 自定义渲染器