通过SWIG从Ruby调用Boost?

时间:2010-11-15 05:24:44

标签: c++ ruby swig

假设我想从Ruby代码调用一个或多个boost库函数。有许多时候我想要这样做,但最近我想使用Boost Graph库进行有效的图形处理。我认为最常建议的方法是使用SWIG。有没有人经历过为Boost库生成SWIG包装器?这实际上是与Boost互操作的最佳方式吗?无法通过SWIG访问Boost的哪些部分,因为它们需要不受支持的C ++功能才能工作?

1 个答案:

答案 0 :(得分:0)

我不能说我已经专门为Boost库生成了包装器,但是我已经为我自己的模板化类做了。

只要您记住SWIG将使用%template指令包装特定的模板实例,这是完全可行的。

如上文链接的文件中所述:

  

[...]一个简单的C ++模板没有定义SWIG通常可以创建包装器的任何类型的可运行对象代码。因此,为了包装模板,您需要提供有关特定模板实例化的SWIG信息(例如,vector<int>array<double>等)。其次,诸如vector<int>之类的实例化名称通常不是大多数目标语言中的有效标识符名称。因此,在创建包装器时,您需要为模板实例化提供更合适的名称,例如intvector

使用该指令,intvector看起来像这样:

%template(intvector) vector<int>;