是否可以在没有真实文件的情况下创建 ifstream

Is it possible to create an ifstream without a real file

我正在使用需要 ifstream 对象作为输入的第三方库,并且我有一个 stringstream 对象,其中包含他们需要的一切。现在,我必须将 stringstream 的内容写入文件,然后将 ifstream 对象发送到库。我想知道是否可以在内存中直接将 stringstream 转换为 ifstream,这样我就不需要在磁盘上写入文件了?谢谢。

我的图书馆确实接受 std::ifstream 而不是 std::istream,然后我发现了以下 hack:

#include <fstream>
#include <iostream>
#include <sstream>
#include <string>

void foo(std::ifstream& fs)
{
    std::string h;
    fs >> h;
    std::cout << h << std::endl;
}

int main()
{
    std::istringstream s1("hello");
    std::ifstream s2;
    s2.basic_ios<char>::rdbuf(s1.rdbuf());
    foo(s2);
    return 0;
}

不过,我不确定它的安全性如何,因此您可以进一步调查该主题。