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

时间:2011-07-01 21:27:04

标签: c++ python callback swig pyobject

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

我理解他们在示例中做了什么,基本上你编写了一个调用python的C函数。但是,提供的示例在参数列表中仅占用了两倍,因此为python构建参数列表非常简单。

我有一个具有以下签名的C ++回调:

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

其中Vector和Simulation是我自己的类,void *用于持有PyObject的clientData(在示例中使用)

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

任何帮助非常感谢! -Chase

1 个答案:

答案 0 :(得分:0)

我认为你的问题实际上并不是关于SWIG的;它纯粹是关于Python的。在这个级别,你的问题只是从C调用Python,所以你需要在Python文档中学习"Parsing arguments and building values"。 (还有"Extending and Embedding the Python interpreter"。)