Я пишу приложение GL, которое использует внешние библиотеки, которые выводят ошибки на консоль. Я хочу поймать это и распечатать во внутриигровой консоли.
PS: Извините, за мой плохой английский....
Я пишу приложение GL, которое использует внешние библиотеки, которые выводят ошибки на консоль. Я хочу поймать это и распечатать во внутриигровой консоли.
PS: Извините, за мой плохой английский....
Для этого можно использовать два основных подхода:
Если все библиотеки используют std::cout
для ввода-вывода, который вы хотите захватить, вы можете написать свой собственный basic_streambuf
. Затем вы можете просто вызвать std::cout.rdbuf(mybufinst);
, чтобы заменить потоковый буфер, например, используя std::basic_stringbuf
:
#include <sstream>
#include <iostream>
int main() {
static std::basic_stringbuf<std::ostream::char_type> buf;
std::cout.rdbuf(&buf);
std::cout << "Hello captured world!\n";
std::cerr << "Stole: " << buf.str() << std::endl;
}
Вы можете использовать подход, специфичный для платформы, например. в системах POSIX dup2()
позволит вам заменить дескриптор файла другим один или в Windows с SetStdHandle()
. Возможно, вы захотите использовать каналы, а не просто другой файл, и вам нужно быть очень осторожным с блокировкой (поэтому, вероятно, вам нужен выделенный поток)