有几个包可以帮助自动化编写C\C++和其他语言之间的绑定。
在我的例子中,我想要绑定Python,这样的包的一些选项是:SWIG、Boost.Python和Robin。
似乎直接的过程是使用这些包来创建C\C++可链接库(主要是静态函数),并使用它们扩展高级语言。
然而,我的情况是,我已经有了一个用C++开发的工作系统,因此我计划将Python语言嵌入其中,以便将来的开发将使用Python语言。
我不清楚如何(如果可能的话)使用这些包来帮助扩展嵌入式Python,使Python代码能够与系统中已经运行的各种单例实例交互,并实例化C++类并与它们交互。
我正在寻找的是关于最适合这种情况的设计的洞察力。
发布于 2011-05-11 23:45:18
Boost.python可以让你做很多开箱即用的事情,特别是当你使用智能指针的时候。您甚至可以继承Python中的C++类,然后将这些类的实例传递回您的C++代码,并使一切仍然正常工作。我最喜欢的关于如何做各种事情的资源是这个(特别是查看“如何做”部分):http://wiki.python.org/moin/boost.python/。
如果您使用智能指针或侵入式指针,则Boost.python尤其有用,因为它们会透明地转换为PyObject引用计数。此外,它非常擅长使工厂函数看起来像Python构造函数,这使得Python API非常干净。
如果你不使用智能指针,仍然可以做你想做的所有事情,但是你必须弄乱各种返回和生命周期策略,这会让你很头疼。
发布于 2017-10-15 21:08:08
长话短说:这就是现代的另类pybind11。
长版本:我还必须嵌入python。Api的Python接口很小,所以我决定使用C C++。事实证明,这是一场噩梦。通过公开类,您可以编写大量复杂的样板代码。Python通过使用可读的接口定义极大地避免了这种情况。然而,我发现boost缺乏一个复杂的文档和数据,或者一些你仍然需要称为Python api的东西。此外,他们的构建系统似乎给人们带来了麻烦。我不能说,因为我使用系统提供的包。最后,我尝试了boost python fork pybind11,不得不说它确实很方便,并且修复了boost的一些缺点,比如使用Python Api的必要性,使用lambdas的能力,缺乏易于理解的文档和自动异常转换。此外,它只是头文件,并不会对部署产生巨大的boost依赖,所以我可以明确地推荐它。
https://stackoverflow.com/questions/5965514
复制相似问题