Как мне конвертировать io.Reader в std :: istream с помощью SWIG & amp; ОЦП?

Я пытаюсь использовать SWIG для создания оболочки Go для API C ++, который использует std::istream читать двоичные данные. Я хотел бы быть в состоянии передать io.Reader к этим API, но я не уверен, как создать отображение между ним и std::istream, Я знаю, что мне нужно реализовать std::streambuf Я полагаю, что в подклассе все остальное будет связано с режиссерами и типографскими картами, но я недостаточно знаком с SWIG, чтобы определить правильную комбинацию.

Есть идеи?

1

Решение

io.Reader является слишком общим, чтобы быть переданным функциям C — это может вообще не быть поддержано в реальном файле (это просто класс, который реализует функцию Read (…))

То, что вы могли бы сделать (если вы не в Windows), это использовать os.Pipe() чтобы дать вам надежный объект FH, но, к сожалению, стандартный поток std :: * не может создать поток из дескриптора открытого файла.

Труба выглядит примерно так:

func wrapReader(r io.Reader) uintptr {
pr, pw, err := os.Pipe()
if err != nil {
panic(err)
}

go func () {
_, _ io.Copy(pw, r)
_ = pw.Close()
}()

return pr
}

Если вы объедините что-то из кода в этом ответе Как создать f ++ cstream из файлового дескриптора POSIX? вы можете получить то, что вам нужно

0

Другие решения

Других решений пока нет …