2

有几个包可以帮助自动化编写 C\C++ 和其他语言之间的绑定任务。

就我而言,我想绑定 Python,此类包的一些选项是:SWIGBoost.PythonRobin

似乎直接的过程是使用这些包来创建 C\C++ 可链接库(大部分是静态函数)并使用它们来扩展高级语言。

但是,我的情况是我已经有一个用 C++ 开发的工作系统,因此计划将 Python 嵌入其中,以便未来的开发将在 Python 中进行。

我不清楚如何,如果可能的话,如何使用这些包来帮助扩展嵌入式 Python,使 Python 代码能够与系统中已经运行的各种 Singleton 实例进行交互,并实例化 C++类并与他们互动。

我正在寻找的是关于最适合这种情况的设计的见解。

4

2 回答 2

2

Boost.python 让你可以直接做很多这些事情,特别是如果你使用智能指针。您甚至可以从 Python 中的 C++ 类继承,然后将这些实例传递回您的 C++ 代码并让一切正常工作。我最喜欢的关于如何做各种事情的资源是这个(特别是查看“如何做”部分):http ://wiki.python.org/moin/boost.python/ 。

如果您使用智能指针或侵入式指针,Boost.python 特别好,因为它们透明地转换为 PyObject 引用计数。此外,它非常擅长使工厂函数看起来像 Python 构造函数,这使得 Python API 非常干净。

如果你不使用智能指针,你仍然可以做你想做的所有事情,但是你必须弄乱各种退货和终身政策,这会让你头疼。

于 2011-05-11T15:45:17.703 回答
1

简而言之:有现代替代品 pybind11。

长版:我还必须嵌入 python。C++ Python 接口很小,所以我决定使用 C Api。结果证明这是一场噩梦。暴露类可以让你编写大量复杂的样板代码。Boost::Python 通过使用可读的接口定义极大地避免了这种情况。然而,我发现 boost 缺乏复杂的文档,并且做一些你仍然需要调用 Python api 的东西。此外,他们的构建系统似乎给人们带来了麻烦。我不知道,因为我使用系统提供的软件包。最后我尝试了 boost python fork pybind11,不得不说它真的很方便,并且修复了 boost 的一些缺点,比如必须使用 Python Api、能够使用 lambdas、缺乏易于理解的文档和自动异常翻译.

于 2017-10-15T13:08:08.183 回答