使用boost::python 导出c++的函数和类都比较容易,可以参见boost::python模块的tutorial。
问题:
但是如何导出C++的数组并不是一个容易的事情,恰逢项目需要使用,于是研究了一番。
解决记录:
- 先上boost官网的boost::python模块的tutorial,没有发现这方面的介绍和样例。
- 然后找[Frequently Asked Questions (FAQs)],发现有介绍 wrap的方法,该方法的示例可以在scitbx模块中找到示例(感觉boost::python和scitbx的编写者是同一群人)。
- 找到了,就先照着做吧,从GitHub上下载了scitbx,看了下其给出的两个参考cpp。琢磨了一会儿,发现实现方式是在是太麻烦了,不符合奥卡姆剃刀原则。心想,这个回答非常老了(2002/03/10),过了十几年了,现在肯定有新的解决方案吧?
- 于是重新搜索,找了半天之后,在Stack Overflow找到了可用的解决方案,直接在C++中定义
boost::python::list
即可。
直接上代码:
下面的例子非常清晰地给出了python list <--> stl vector/list 之间的转换,可以轻松地扩展到其他STL容器。-->
巧的是,该回答的作者表示这个方法是在cctbx/scitbx中参考得到的,哈哈,觉得自己应该再仔细研究一下scitbx =.=。
1 |
|
用于自查
简单(省略)记录目前自己所使用的boost::python导出方法,便于自查,包括函数,类,python元组tuple,python list:
1 |
|