1

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

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

使用 SWIG,我已经将它绑定到 Ruby,但是 Ruby 的 $stdin 变量与 C++ 中的流类之类的东西根本不同,所以我不确定如何 1) 以我的方式将 C++ 类公开给 Ruby可以使用 $stdin,或者 2) 将 $stdin 转换为 C++ 类可以理解的内容。

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

谢谢。

4

2 回答 2

1

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

于 2009-06-01T17:34:53.893 回答
0

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

我认为您可以使用此问题中的答案

于 2009-06-01T15:36:19.263 回答