从 std::istream 读取 SDL_RWops
我很惊讶谷歌没有找到解决方案。我正在寻找一种允许 SDL_RWops 与 std::istream 一起使用的解决方案。 SDL_RWops 是在 SDL 中读取/写入数据的替代机制。
有解决该问题的网站链接吗?
一个明显的解决方案是将足够的数据预先读取到内存中,然后使用 SDL_RWFromMem。然而,这有一个缺点,我需要事先知道文件大小。
似乎这个问题可以通过“覆盖”SDL_RWops 函数来解决......
I'm quite surprised that Google didn't find a solution. I'm searching for a solution that allows SDL_RWops to be used with std::istream. SDL_RWops is the alternative mechanism for reading/writing data in SDL.
Any links to sites that tackle the problem?
An obvious solution would be to pre-read enough data to memory and then use SDL_RWFromMem. However, that has the downside that I'd need to know the filesize beforehand.
Seems like the problem could somehow be solved by "overriding" SDL_RWops functions...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我觉得回答自己的问题很糟糕,但它让我困扰了一段时间,这就是我想出的解决方案:在
istream 永远不会被 SDL 释放(并且它们在操作过程中一直存在)的假设下工作。另外,只有 istream 支持,将为 ostream 完成一个单独的函数——我知道我可以传递 iostream,但这不允许将 istream 传递给转换函数:/。
欢迎任何有关错误或升级的提示。
I feel bad answering my own question, but it preocupied me for some time, and this is the solution I came up with:
Works under the assumptions that istream's are never freed by SDL (and that they live through the operation). Also only istream support is in, a separate function would be done for ostream -- I know I could pass iostream, but that would not allow passing an istream to the conversion function :/.
Any tips on errors or upgrades welcome.
如果您尝试从 istream 获取 SDL_RWops 结构,可以通过将整个 istream 读入内存,然后使用 SDL_RWFromMem 获取表示它的结构来实现。
以下是一个简单的例子;请注意,这是不安全的,因为没有进行健全性检查。例如,如果文件大小为 0,则访问 buffer[0] 可能会在调试版本中引发异常或断言。
If you're trying to get an SDL_RWops struct from an istream, you could do it by reading the whole istream into memory and then using SDL_RWFromMem to get a struct to represent it.
Following is a quick example; note that it's unsafe, as no sanity checks are done. For example, if the file's size is 0, accessing buffer[0] may throw an exception or assert in debug builds.