[英]How do I convert an io.Reader to a std::istream with SWIG & CGO?
我正在嘗試使用SWIG為使用std::istream
讀取二進制數據的C ++ API創建Go包裝器。 我希望能夠將io.Reader
傳遞給這些API,但是我不確定如何在它與std::istream
之間創建映射。 我知道我需要實現一個std::streambuf
子類,並且我認為其余的都將涉及Director和Typemap,但是我對SWIG不夠熟悉,無法找出正確的組合。
有任何想法嗎?
io.Reader
太籠統了,無法傳遞給C函數-它可能根本不備份在真實文件上(它只是實現Read(...)函數的類)
您可以做的事情(只要您不在Windows上)就是使用os.Pipe()
給您一個真正的FH對象,但是可惜的是std :: * stream沒有任何方法可以從打開文件句柄。
管道位看起來像這樣:
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
}
如果您在此答案中結合了一些代碼,那么如何從POSIX文件描述符構造c ++ fstream? 您可能會得到所需的東西
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.