C++通过SWIG与Python进行回调,函数参数较复杂时如何处理?
我刚刚读了“SWIG和Python”教程的以下部分:http://www.swig.org/Doc1.1/HTML/Python.html#n11
我明白他们在例子中做了什么,基本上就是写一个C函数来调用Python。不过,提供的例子只接受一个双精度浮点数作为参数,这让为Python构建参数列表变得相对简单。
我有一个C++的回调函数,它的签名如下:
Vector (*CALLBACK)(Simulation*, Vector, Vector, double, void*)
这里的Vector和Simulation是我自己定义的类,而void*是用来存放PyObject的clientData(就像例子中使用的那样)。
我知道SWIG可以包装Vector和Simulation这两个类,因为我可以在Python的命令行中创建它们。唯一的问题是,我不知道如何把回调函数中的Vector参数转换成适合Python参数列表的PyObject。SWIG在包装类的时候显然有办法做到这一点,但我不知道在函数中手动实现这个过程。
非常感谢任何帮助!
- Chase
1 个回答
0
我觉得你的问题其实跟SWIG没什么关系,主要是关于Python的。在这个层面上,你的问题就是如何从C语言调用Python,所以你需要去看看Python文档中的“解析参数和构建值”部分。(还有“扩展和嵌入Python解释器”。)