常用代码。
UI程序的std::cout重定向输出到Visual Studio的debug输出窗口
#include <iostream>
#include <streambuf>
#include <vector>
#include <string>
#include <afxwin.h> //MFC// 自定义 streambuf 类,用于重定向输出到 Visual Studio 的输出窗口
class OutputDebugStreamBuf : public std::streambuf {
public:OutputDebugStreamBuf() : buffer(256) {setp(buffer.data(), buffer.data() + buffer.size() - 1);}~OutputDebugStreamBuf() {sync();}protected:// 重写 overflow 方法,处理缓冲区溢出int_type overflow(int_type c) override {if (c != traits_type::eof()) {*pptr() = c;pbump(1);if (sync() != 0) {return traits_type::eof();}}return c;}// 重写 sync 方法,将缓冲区内容输出到 Visual Studio 的输出窗口int sync() override {if (pbase() != pptr()) {std::string output(pbase(), pptr() - pbase());OutputDebugStringA(output.c_str()); // 使用 OutputDebugStringA 输出setp(buffer.data(), buffer.data() + buffer.size() - 1); // 重置缓冲区}return 0;}private:std::vector<char> buffer; // 缓冲区
};// 管理 std::cout 重定向的类
class CoutRedirector {
public:CoutRedirector() {// 保存原始的 std::cout 缓冲区original_cout_buffer = std::cout.rdbuf();// 重定向 std::cout 到自定义的 streambufstd::cout.rdbuf(&debugStreamBuf);}~CoutRedirector() {// 恢复原始的 std::cout 缓冲区if (original_cout_buffer) {std::cout.rdbuf(original_cout_buffer);}}private:OutputDebugStreamBuf debugStreamBuf; // 自定义的 streambufstd::streambuf* original_cout_buffer = nullptr; // 保存原始的 std::cout 缓冲区
};// 全局变量,用于管理 std::cout 的重定向
CoutRedirector g_CoutRedirector;