$ stdin совместимость с std :: istream с использованием Swig, C ++ и Ruby
Вопрос
У меня есть функция в C ++, которая принимает std :: iStream в качестве ввода:
class Foo {
Foo(std::istream &);
}
Используя SWIG, я связываю его с Ruby, но переменная Ruby $ stdin в основном отличается от чего -либо похожа на классы потока в C ++, поэтому я не уверен, как либо 1) раскрыть класс C ++ на Ruby так, как я может использовать $ stdin, или 2) преобразовать $ stdin в то, что может понять класс C ++.
У кого -нибудь есть опыт с привязкой iostreams в C ++ с Ruby?
Спасибо.
Решение
Вы можете использовать экземпляр STD :: IStream, который реализует свои операции с помощью методов Ruby на $ stdin, вызванном через интерфейс C (например, с использованием RB_FUNCALL). Вы не можете сделать это, получая класс от самого STD :: самого ISTERA, потому что его методы не являются виртуальными; Вместо этого вам нужно будет получить из STD :: Stream_buf и создать экземпляр Istream, который использует ваш буфер потока.
Другие советы
Может, вы можете использовать стиль C Файл дескрипторы вместо Istream, а затем «преобразовать» его в поток C ++,
Я думаю, вы можете использовать ответы в этом вопрос