繁体   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