我在C ++中有一个函数,它接受std :: istream作为输入:
class Foo {
Foo(std::istream &);
}
使用SWIG,我将它绑定到Ruby,但Ruby的$ stdin变量与C ++中的流类完全不同,所以我不确定如何将C ++类暴露给Ruby中的一个我可以使用$ stdin的方式,或者2)将$ stdin转换成C ++类可以理解的东西。
任何人都有将C ++中的iostream绑定到Ruby的经验吗?
感谢。
答案 0 :(得分:1)
您可以使用std :: istream实例,该实例使用通过C接口调用的$ stdin上的Ruby方法实现其操作(例如,使用rb_funcall)。你不能通过从std :: istream本身派生一个类来实现它,因为它的方法不是虚拟的;相反,你需要从std :: stream_buf派生并实例化一个使用你的流缓冲区的istream。
答案 1 :(得分:0)
也许您可以使用C样式文件描述符而不是istream然后将其“转换”为C ++流,
我认为您可以使用此question
中的答案