Можно ли создать ifstream без реального файла? - PullRequest
1 голос
/ 29 января 2020

Я использую стороннюю библиотеку, для которой нужен объект ifstream, и у меня есть объект stringstream, который содержит все, что им нужно. Прямо сейчас мне нужно записать содержимое stringstream в файл и затем отправить объект ifstream в библиотеку. Мне интересно, можно ли напрямую преобразовать stringstream в ifstream в памяти, чтобы мне не нужно было записывать файл на диск? спасибо.

1 Ответ

3 голосов
/ 29 января 2020

Если ваша библиотека действительно принимает std::ifstream вместо std::istream, то я нашел следующий взлом:

#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;
}

Однако я не уверен, насколько это безопасно, поэтому вы можете исследовать топи c дальше.

...