gpt4 book ai didi

c++ - 如何使用 SWIG 和 CGO 将 io.Reader 转换为 std::istream?

转载 作者:IT王子 更新时间:2023-10-29 02:23:45 24 4
gpt4 key购买 nike

我正在尝试使用 SWIG 为使用 std::istream 读取二进制数据的 C++ API 创建 Go 包装器。我希望能够将 io.Reader 传递给这些 API,但我不确定如何在它和 std::istream 之间创建映射。我知道我需要实现一个 std::streambuf 子类,我假设其余部分将涉及 Controller 和类型映射,但我对 SWIG 不够熟悉,无法找出正确的组合。

有什么想法吗?

最佳答案

io.Reader 过于笼统,无法传递给 C 函数——它可能根本无法支持真实文件(它只是一个实现 Read(...) 函数的类)

你可以做的(只要你不在 windows 上)是使用 os.Pipe() 给你一个真正的 FH 对象,但遗憾的是 stock 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
}

如果您将此答案中的一些代码结合起来 How to construct a c++ fstream from a POSIX file descriptor?你可能会得到你需要的东西

关于c++ - 如何使用 SWIG 和 CGO 将 io.Reader 转换为 std::istream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32927452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com