$ stdin совместимость с std :: istream с использованием Swig, C ++ и Ruby

StackOverflow https://stackoverflow.com/questions/935290

Вопрос

У меня есть функция в 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 ++,

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top