1

入力として std::istream を受け取る C++ の関数があります。

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インターフェイスを介して(たとえば、rb_funcallを使用して)呼び出された$stdinのRubyメソッドで操作を実装できます。std :: istream自体からクラスを派生させることによってそれを行うことはできません。これは、そのメソッドが仮想ではないためです。代わりに、std :: stream_bufから派生し、ストリームバッファを使用するistreamをインスタンス化する必要があります。

于 2009-06-01T17:34:53.893 に答える