问题描述
我有一个Python程序,其中有一个应该能够接受Python lambda的函数,然后传递给正在运行的C ++程序。
我正在考虑使用pickle.dumps将lambda序列化为字符串。 然后我只是将字符串传递给C ++程序,之后我使用boost.python进行反序列化并在C ++中获取lambda。 但是,我才意识到功能无法被腌制。
我相信应该有我不了解的现有解决方案。 提前感谢任何建议!
1楼
看一下 。 链接转到关于从C调用Python函数的部分。听起来你是C API的新手,所以从顶部开始。
Python不区分各种类型的可调用对象。
就C API而言,函数,lambda,具有__call__
方法的对象是可互换的。
我不会在这里复制/粘贴所有内容,因为它在链接中编写得非常好,但基本上你用C(或C ++,这两种API都适用)制作Python模块。
第一个例子向您展示了如何。
然后你可以从Python调用一个C函数,并传递它,无论你需要传递它。
所有Python对象都通过PyObject*
指针暴露给C,并且C API提供了许多函数来操作对象,转换为C数据类型或从C数据类型转换,并执行诸如调用可调用对象之类的操作。
boost.python和SWIG等包装器在内部使用此API。