Кажется, нет особого смысла в том, чтобы весь файл в std::string
просто поместить его в std::istringstream
и прочитал его можно было прочитать из std::ifstream
непосредственно вместо. Если вы действительно хотите, чтобы получить файл в std::string
, вот несколько вариантов:
std::string s0{ std::istreambuf_iterator<char>(in), std::istreambuf_iterator<char>() };
std::string s1((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>());
std::ostringstream out; out << in.rdbuf(); std::string s2 = out.str();
Очевидно, вы бы просто использовать один из этих подходов, каждый из которых будет потреблять входной поток in
. Когда у вас есть файл в std::string
, вы можете построить из него std::istringstream
.
Я думаю, вы также можете использовать
std::stringstream stream;
stream << in.rdbuf();
stream.seekg(std::ios_base::beg, 0);
избежать необходимости читать содержимое в std::string
первый.
Я хочу использовать поток строк для токенизации, делая специальную обработку на конце строки для каждой строки. Есть ли способ избежать установки содержимого строки из getline в поток строк –