簡體   English   中英

如何使用SWIG和CGO將io.Reader轉換為std :: istream?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM