使用Swig将std :: set转换为ruby

时间:2016-05-05 14:07:53

标签: c++ ruby stl swig

我正在使用Swig在ruby中使用C ++。目前我已经完成了一个简单的文件david.h示例

#include <stdio.h>
class David
{
public:
    David(int x)
    {
        this->x = x;
    }
    void announce()
    {
        printf("David %d\n", x);
    }
    int x;
};

另一个像这样的swig文件

%module "david"
%{
#include <libdavid.h>
%}
class David
{
public:
    David(int x);
    void announce();
    int x;
};

我的extconf.rb看起来像这样

require 'mkmf'
system('swig -c++ -ruby libdavid.i') or abort
create_makefile('david')

这有助于我在这样的ruby中执行一个非常简单的例子

2.2.1 :001 > a=David::David.new(42)
 => #<David::David:0x000000022c3ec0 @__swigtype__="_p_David"> 
2.2.1 :002 > a.x
 => 42 

现在我已经努力了一段时间,但我根本无法弄清楚如何使用示例here中给出的c ++ stl中的set。 如果有人可以帮我解决我如何创建一组整数或者矢量并展示如何在该集合/向量上插入和擦除方法,那将是非常好的。简单的代码示例不仅对我而且对于将来可能面临这种情况的许多人来说非常有用。

如果你很忙,这只是个人要求随意跳过这个。
说实话,我已经使用堆栈溢出了很长一段时间,但慢慢地我开始对社区感到失望。我一直在发几个问题而且我没有得到满意的答案,没有上升票,没有下票,没有,我只是没有得到任何答案。让我感到惊讶的是,在简单的谷歌搜索中可以回答的非常微不足道的问题通常非常受欢迎,新用户的重要问题要么被严重投票,要么被完全忽略。我知道社区不会对我说任何事情。但如果有人可以解释可能的原因,我将非常感激。

由于

1 个答案:

答案 0 :(得分:1)

这不完整,但可以作为有用的参考。我找不到适当的文档,但它工作正常。 将其添加到swig文件

$@"Height: {height}
Width: {width}
Background: {background}"

现在运行extconf.rb 现在,ruby

支持以下set命令
%include <std_set.i>
namespace std {
   %template(IntSet) set<int>;
}

push如何工作就像插入一样对我来说仍然不清楚但是它有效。 但是这个例子清楚地显示了如何使用集合。类似的方法可以用于矢量。

这个答案当然不完整,非常欢迎有经验的用户给出答案/评论。