$ stdin使用swig,C ++和Ruby与std :: istream兼容

时间:2009-06-01 15:24:24

标签: c++ ruby stdin swig iostream

我在C ++中有一个函数,它接受std :: istream作为输入:

class Foo {
    Foo(std::istream &);
}

使用SWIG,我将它绑定到Ruby,但Ruby的$ stdin变量与C ++中的流类完全不同,所以我不确定如何将C ++类暴露给Ruby中的一个我可以使用$ stdin的方式,或者2)将$ stdin转换成C ++类可以理解的东西。

任何人都有将C ++中的iostream绑定到Ruby的经验吗?

感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用std :: istream实例,该实例使用通过C接口调用的$ stdin上的Ruby方法实现其操作(例如,使用rb_funcall)。你不能通过从std :: istream本身派生一个类来实现它,因为它的方法不是虚拟的;相反,你需要从std :: stream_buf派生并实例化一个使用你的流缓冲区的istream。

答案 1 :(得分:0)

也许您可以使用C样式文件描述符而不是istream然后将其“转换”为C ++流,

我认为您可以使用此question

中的答案