Совместимость с $ stdin с std :: istream с использованием swig, C ++ и Ruby - PullRequest
1 голос
/ 01 июня 2009

У меня есть функция в C ++, которая принимает в качестве ввода std :: istream:

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

Используя SWIG, я связал его с Ruby, но переменная $ stdin в Ruby принципиально отличается от чего-либо вроде потоковых классов в C ++, поэтому я не уверен, как это сделать: способ, которым я могу использовать $ stdin, или 2) конвертировать $ stdin в то, что может понять класс C ++.

Кто-нибудь имеет опыт связывания iostreams в C ++ с Ruby?

Спасибо.

Ответы [ 2 ]

1 голос
/ 01 июня 2009

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

0 голосов
/ 01 июня 2009

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

Я думаю, вы можете использовать ответы на этот вопрос

...