C++ 中的 Python lambda

标签 python c++ boost

我有一个 Python 程序,其中有一个函数应该能够接受 Python lambda,然后传递给正在运行的 C++ 程序。

我正在考虑使用 pickle.dumps 将 lambda 序列化为字符串。然后我将字符串传递给 C++ 程序,之后我使用 boost.python 进行反序列化并在 C++ 中获取 lambda。但是,我刚刚意识到函数不能被 pickle。

我相信应该有我不知道的现有解决方案。在此先感谢您的任何建议!

最佳答案

看看 C API tutorial page .该链接转到有关从 C 调用 Python 函数的部分。听起来您是 C API 的新手,所以请从顶部开始。

Python 不区分各种类型的可调用对象。就 C API 而言,具有 __call__ 方法的函数、lambda 和对象是可以互换的。

我不会在此处复制/粘贴所有内容,因为它在链接中写得非常好,但基本上您可以用 C(或 C++,API 在两者中工作)创建 Python 模块。第一个示例向您展示了如何操作。然后你可以从 Python 调用 C 函数,并传递你需要传递的任何东西。所有 Python 对象都通过 PyObject* 指针暴露给 C,C API 提供了许多函数来操作对象、转换为/自 C 数据类型,以及执行调用可调用对象等操作。

像 boost.python 和 SWIG 这样的包装器在内部使用这个 API。

关于C++ 中的 Python lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33273978/

相关文章:

python - Elasticsearch TransportError(400, 'mapper_parsing_exception')

python - 如何从 jinja2 中的变量内部打印空格

c++ - boost::lexical_cast<signed char> 无法处理负数?

c++ - BOOST 中的属性映射是什么?

c++ - 在 C++ 中为分布式系统构建自定义通信协议(protocol)

python - 如何在日期间隔内添加缺失的日期?

python - 如何在Python Scrapy中的子div中使用特殊的src获取href

c++ - 子类真的继承私有(private)成员变量吗?

c++ - OpenGL 帧缓冲区 - 渲染到纹理创建具有主帧缓冲区内容的纹理

python - Boost.Python 因静态库而失败