$stdin съвместимост със std::istream, използвайки swig, C++ и Ruby

Имам функция в C++, която приема std::istream като вход:

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

Използвайки SWIG, аз го свързах с Ruby, но променливата $stdin на Ruby е фундаментално различна от всичко подобно на потоковите класове в C++, така че не съм сигурен как да 1) изложа C++ класа на Ruby по начин, по който може да използва $stdin, или 2) конвертира $stdin в нещо, което C++ класът може да разбере.

Някой има ли опит със свързването на iostreams в C++ към Ruby?

Благодаря.


person Kenny Peng    schedule 01.06.2009    source източник


Отговори (2)


Можете да използвате екземпляр на std::istream, който изпълнява своите операции с Ruby методи на $stdin, извикан през C интерфейса (напр. чрез rb_funcall). Не можете да го направите, като извлечете клас от самия std::istream, защото неговите методи не са виртуални; вместо това ще трябва да извлечете от std::stream_buf и да създадете istream, който използва вашия буфер за поток.

person Nathan Kitchen    schedule 01.06.2009

може би можете да използвате Файлови дескриптори в стил C вместо istream и след това да го „конвертирате“ в C++ поток,

Мисля, че можете да използвате отговорите в този въпрос

person Baget    schedule 01.06.2009