2011-03-01 231 views
3

我开始在一个巨大的C++库(由多个相互依赖的静态库构成)上使用SWIG将它暴露给python。该库定义了许多始终用作参数的基本类(例如,不同类型的图像)。在lib中还广泛使用STL,继承和模板。将C++库暴露给Python + PIL

到目前为止,我有一小部分可用于Python的lib,但想逐步添加剩余的90 +%。

对我来说,与SWIG合作真的没什么乐趣:与模板实例化,学习所有SWIG语法和关键字等等。我最近玩了一些CTypes,发现它很愉快,我现在正在考虑写一个整个库的extern C接口,而不是使用SWIG。

我宁愿使用C/C++和/或Python进行编码,而不是学习一组隐含的SWIG命令(也包括SIP)。

有相当多的问题,在那里已经提出类似的建议,所以我会加入一些新的东西和具体:

我想在库的内部图像类从Python中可见的PIL图像透明,而不是SWIG包装的本地类。我将不得不求助于普通的Python外部API来完成这一任务吗?

我欢迎任何和所有的建议!

+0

我不能相信我错过了这个线程:http://stackoverflow.com/questions/1076300/extending-python-with-c-c更多的选择! – 2011-03-02 14:07:40

+0

我还没有时间研究这个问题,但应该在下个月这样做。我可能会尝试一些方法并在此发布我的发现/意见。 – 2011-04-05 08:47:53

回答

1

你有没有考虑过使用Boost.Python?

+0

确实我在搜索时遇到过它,但我从未使用过增强功能。在没有碰撞的情况下安装标准C++库是否安全? (我使用的是Visual Studio 2005,当我使用MSVC6.0和Roguewave ++ shudder ++时,仍然有噩梦)。那么我将不得不真的考虑一下。感谢大开眼界! – 2011-03-02 01:49:58

+0

我使用Boost和GCC一起使用了标准C++库,没有任何问题。我听说过人们正在使用Visual Studio做同样的事情。 Boost非常成熟,并且包含许多高质量的库,我相信它足以用于生产软件。我已经使用了Boost.Python和Luabind(就像Boost.Python,但是对于Lua),并且对他们工作的容易程度印象深刻。 – 2011-03-02 17:28:31