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

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

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

还有另一个像swig这样的文件

 %module "david" %{ #include  %} 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) => # 2.2.1 :002 > ax => 42 

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


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

谢谢

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

 %include  namespace std { %template(IntSet) set; } 

现在运行extconf.rb现在,ruby支持以下set命令

 2.2.1 :001 > a=David::IntSet.new => std::set,std::allocator< int > > [] 2.2.1 :002 > a.push(4) => 4 2.2.1 :003 > a.push(1) => 1 2.2.1 :004 > a.push(123) => 123 2.2.1 :005 > a.push(612) => 612 2.2.1 :006 > a => std::set,std::allocator< int > > [1,4,123,612] 2.2.1 :007 > a[0] => 1 2.2.1 :008 > a.erase(a.begin) => nil 2.2.1 :009 > a => std::set,std::allocator< int > > [4,123,612] 2.2.1 :010 > a[0] => 4 2.2.1 :011 > a[1] => 123 2.2.1 :012 > a.erase(a.begin) => nil 2.2.1 :013 > a => std::set,std::allocator< int > > [123,612] 

如何插入套装仍然不清楚,但它的工作原理。 但是这个例子清楚地显示了如何使用集合。 类似的方法可用于矢量。

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