c ++ 11 — Вызов функции, когда stderr написан на C ++?

Есть ли способ выполнить функцию обратного вызова или иным образом вызвать предопределенную функцию всякий раз, когда данные записываются в стандартный поток, такой как stderr или же stdout? В идеале это можно использовать, чтобы приложение могло выводить как обычно с printf в случае stdout или же fprintf для других FILE потоки, и условно выполнять дополнительные задачи, такие как утверждение в зависимости от текущих настроек. Это может иметь преимущество автоматического запуска этого кода обработки ошибок, когда другие библиотеки выводят в поток.

Я знаю, что выход stderr а также stdout может быть перенаправлен на другой FILE обрабатывает с помощью std::freopen, Практично ли реализовать альтернативный FILE поток, который обеспечивает такое поведение, или это потребует повторной реализации большого количества стандартных библиотечных функций?

Были бы предпочтительны совместимые со стандартами предложения C ++ (включая C ++ 11), хотя я был бы открыт для решений только для Windows, если это необходимо.


С тех пор у меня была попытка реализовать потоковый буфер, как это было предложено думстера, с небольшой помощью Фильтрация Streambufs Джеймсом Канзе. Если не появятся какие-либо другие предложения, кажется, что это самое близкое к исходному предложению. Он не будет перехватывать вывод в стиле C, который, как я подозреваю, либо невозможен, либо непрактичен, но в остальном обеспечивает все необходимые мне функции.

4

Решение

Вы можете заменить потоковый буфер для перехвата любого вывода в эти потоки, см. Функцию rdbuf (). Я думаю, что вам нужно только реализовать функцию overflow () в классе streambuffer.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]