c ++ получить строку (сериализованный объект) из ostream - PullRequest
0 голосов
/ 06 января 2011

У меня есть класс Image, который имеет следующую реализацию

friend std::ostream& operator << ( std::ostream &os,Image* &img);

Так что я могу сериализовать его, вызвав

ostm << img; // which will write an string into the ostream.

Можно ли получить эту строку из ostream илисериализовать его непосредственно в строковый объект?

Спасибо!

Решения работали как шарм.Большое вам спасибо!

Ответы [ 2 ]

1 голос
/ 06 января 2011

Да, вы можете использовать std::ostringstream.

Например,

#include <sstream>
#include <string>
#include <stdexcept>

std::string Serialize( const Image& img )
{
    std::ostringstream oss;

    if (!(oss << img))
    {
        throw std::runtime_error("Failed to serialize image");
    }

    return oss.str();
}
0 голосов
/ 06 января 2011

Предположительно, ваш фактический объект - iostream или stringstream.Если iostream, вы можете сделать это:

std::iostream ss;
ss << "Some text\nlol";
std::string all_of_it((std::istreambuf_iterator<char>(ss)), std::istreambuf_iterator<char>());
std::cout << all_of_it; // Outputs: "Some text", then "lol" on a new line;

Вам нужен istreambuf_iterator, отсюда и требование для двунаправленного потока, такого как iostream.Всякий раз, когда у вас есть извлечение, а также вставка, вы должны использовать это, или stringstream (или fstream при работе с файлами).

Для stringstream, просто используйте его .str() членфункция для получения своего буфера в виде string.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...