【发布时间】:2016-07-27 20:45:52
【问题描述】:
我有一个用 C++ 编写的程序,它自己运行,但是我们想让 Python 可以访问它。具体来说,我们有几个在 c++ 中更高效的函数,但是我们使用 Python 脚本对输出做了很多其他的事情。我不想在 Python 中重写整个 main(),因为我们使用了 Boost 的根查找算法和其他在 Python 中很难做到的功能。
是否可以在保留 c++ main() 的同时将 Python 绑定添加到这些函数?我以前从未做过 Python 绑定,但我看过 Boost.python,因为我们已经在使用 Boost。大多数示例在 hpp 文件中使用 c++ 函数/类并将它们嵌入到 python 程序中,这并不是我们想要的。
我们想要的是将我们的 c++ 程序保持为独立的,这样它就可以根据用户的需要按原样运行,并且还允许用户从 Python 程序中调用这些函数。能够使用相同的 Makefile 和 exe 会很棒。我们真的不想制作一个单独的包含绑定函数的 c++ 库;我们对制作 Python 版本的代码不感兴趣,只是允许访问这些有用的功能。
谢谢
【问题讨论】:
-
你可能需要 GObject Introspection 库。
-
至少在 Cython 中,可以有像“C++ main -> C 函数在 cython 中实现 -> python 代码 -> python 模块在 cython 中实现 -> C++ 代码......”这样的调用链。 Boost.python 也有可能。
-
值得指出的是,对于 C/C++ 主程序来说,除了解析参数然后使用解析结果调用实际处理之外,它通常被认为是一种很好的做法——这使你正在考虑做,或任何绑定,更容易。
标签: python c++ boost boost-python python-bindings