当函数接受非平凡的参数时,C++通过SWIG用python回调

C++ callback with python through SWIG when the function takes non-trivial arguments?

本文关键字:通过 C++ SWIG 回调 python 参数 函数      更新时间:2023-10-16

我刚刚阅读了"SWIG和Python"教程的以下部分:http://www.swig.org/Doc1.1/HTML/Python.html#n11

我理解他们在这个例子中的作用,基本上就是编写一个调用python的C函数。然而,所提供的示例在参数列表中只使用了一个double,这使得为python构建参数列表变得相当琐碎。

我有一个C++回调,它有以下签名:

Vector (*CALLBACK)(Simulation*, Vector, Vector, double, void*)

其中Vector和Simulation是我自己的类,void*表示持有PyObject(如示例中所用(的clientData

我知道SWIG同时封装Vector和Simulation类,因为我可以在python shell中创建它们。唯一的问题是,我不知道如何将回调函数中的Vector参数转换为python参数列表中合适的PyObject。SWIG在包装类本身时显然有一些方法可以做到这一点,但我不知道如何在函数中手动完成。

非常感谢您的帮助!-Chase

我不认为你的问题实际上是关于SWIG的;它纯粹是关于Python的。在这个级别上,您的问题只是从C调用Python,因此您需要研究Python文档中的"解析参数和构建值"。(也称为"扩展和嵌入Python解释器"。(