假设我想从Ruby代码调用一个或多个boost库函数。有许多时候我想要这样做,但最近我想使用Boost Graph库进行有效的图形处理。我认为最常建议的方法是使用SWIG。有没有人经历过为Boost库生成SWIG包装器?这实际上是与Boost互操作的最佳方式吗?无法通过SWIG访问Boost的哪些部分,因为它们需要不受支持的C ++功能才能工作?
答案 0 :(得分:0)
我不能说我已经专门为Boost库生成了包装器,但是我已经为我自己的模板化类做了。
只要您记住SWIG将使用%template
指令包装特定的模板实例,这是完全可行的。
如上文链接的文件中所述:
[...]一个简单的C ++模板没有定义SWIG通常可以创建包装器的任何类型的可运行对象代码。因此,为了包装模板,您需要提供有关特定模板实例化的SWIG信息(例如,
vector<int>
,array<double>
等)。其次,诸如vector<int>
之类的实例化名称通常不是大多数目标语言中的有效标识符名称。因此,在创建包装器时,您需要为模板实例化提供更合适的名称,例如intvector
。
使用该指令,intvector
看起来像这样:
%template(intvector) vector<int>;