通过 SWIG 从 Ruby 调用 Boost?
Posted
技术标签:
【中文标题】通过 SWIG 从 Ruby 调用 Boost?【英文标题】:Calling Boost from Ruby via SWIG? 【发布时间】:2010-11-15 05:24:44 【问题描述】:假设我想从 Ruby 代码中调用一个或多个 boost 库函数。有很多我想这样做的例子,但最近我想使用 Boost Graph 库进行高效的图形处理。我认为最常建议这样做的方法是使用 SWIG。有没有人经历过并为 Boost 库生成 SWIG 包装器?这实际上是与 Boost 互操作的最佳方式吗? Boost 的哪些部分无法通过 SWIG 访问,因为它们需要不受支持的 C++ 功能才能工作?
【问题讨论】:
我也在考虑从 Ruby 访问 Boost Graph 库。你试过了吗?如果是这样,如果您能提供有关它的信息,将会有所帮助。 你在哪里得到了这个? 【参考方案1】:我不能说我专门为 Boost 库生成了包装器,但我已经为自己的模板类生成了包装器。
只要您记住 SWIG 将使用 %template
指令包装特定的模板实例化,这是完全可行的。
如上面链接的文档中所述:
[...] 裸 C++ 模板没有定义任何类型的可运行对象代码,SWIG 通常可以为其创建包装器。因此,为了包装模板,您需要提供有关特定模板实例化的 SWIG 信息(例如,
vector<int>
、array<double>
等)。其次,像vector<int>
这样的实例化名称在大多数目标语言中通常不是有效的标识符名称。因此,您需要在创建包装器时为模板实例化一个更合适的名称,例如intvector
。
使用该指令,您的 intvector
将如下所示:
%template(intvector) vector<int>;
【讨论】:
以上是关于通过 SWIG 从 Ruby 调用 Boost?的主要内容,如果未能解决你的问题,请参考以下文章
Swig + Lua:调用 m(int argv, char **argc)