我有一个相当复杂的模板化C ++库, 拥有数百个类和数千行代码。 唯一的外部依赖是提升。 我想从R,python等访问这个库。
从我读到的内容来看,swig似乎是要走的路。 但是教程似乎只使用了一个二进制文件 通过编写相应的.i文件。 现在为每个类和文件写一个.i文件 手头的图书馆可能需要数周时间,如果没有的话 月。现在,这不是一个选择。所以我的问题:
是否有任何实用教程可以“sw'”一大片 预先存在的图书馆?
可以或多或少地自动生成这些.i文件吗?
如果没有,还有其他选择吗?
答案 0 :(得分:0)
我没有看到任何很棒的教程,但SWIG文档很不错。
SWIG不生成.i文件,但有许多有用的预编码.i文件。例如,windows.i
用于Windows类型支持,std_vector.i
用于std :: vector C ++支持等。
SWIG会处理.h文件,因此您不必为所有类手动编写包装器。像下面这样的简单.i文件将为您完成大部分工作。
%module mylib
%{
#include "mylib.h"
%}
%include <windows.i> // If on windows...
%include "mylib.h"
如果您的类和方法具有参数和返回值的标准类型,则它可能“正常工作”。但更复杂的类型可能需要额外的包含,模板实例化或手写类型映射。
包装C ++库的另一种选择是boost::Python
,但我自己没有玩过它。