Gio :: OutputStream в строку или std :: ostream - PullRequest
0 голосов
/ 19 октября 2011

Я использую библиотеку libvtemm, которая имеет функцию write_contents. Он берет внутренний буфер и выводит его на объект Glib::RefPtr<Gio::OutputStream>. Я пытался найти способ преобразовать содержимое Gio :: OutputStream в std::string или что-то подобное, чтобы я мог играть и перемещать данные внутри других структур данных.

Кто-нибудь знает, как создать Gio::OutputStream для чего-то вроде std::ostream или преобразовать его содержимое в std::string?

Я вижу, что есть Gio::MemoryOutputStream, было бы что-то подобное полезным для захвата данных в std::ostream?

1 Ответ

0 голосов
/ 21 октября 2011

Для тех из вас, кто ищет ответ, вот что я придумал, чтобы прочитать консольный буфер в std::string.

// Create a mock stream just for this example
Glib::RefPtr<Gio::MemoryOutputStream> bufStream =
  Gio::MemoryOutputStream::create(NULL, 0, &realloc, &free);

// Create the stringstream to use as an ostream
std::stringstream ss;

// Get the stream size so we know how much to allocate
gsize streamSize = bufStream->get_data_size();
char *charBuf = new char[streamSize+1];

// Copy over the data from the buffer to the charBuf
memcpy(charBuf, bufStream->get_data(), streamSize);

// Add the null terminator to the "string"
charBuf[streamSize] = '\0';

// Create a string from it
ss << charBuf;

Надеюсь, что это поможет кому-то в будущем, ктосталкивается с аналогичной проблемой.

...