且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

重定向标准输出/标准错误将一个字符串

更新时间:2023-02-05 07:39:18

是的,您可以将其重定向到一个的std :: stringstream的

Yes, you can redirect it to an std::stringstream:

std::stringstream buffer;
std::streambuf * old = std::cout.rdbuf(buffer.rdbuf());

std::cout << "Bla" << std::endl;

std::string text = buffer.str(); // text will now contain "Bla\n"

您可以使用一个简单的警卫班,以确保缓冲器总是复位:

You can use a simple guard class to make sure the buffer is always reset:

struct cout_redirect {
    cout_redirect( std::streambuf * new_buffer ) 
        : old( std::cout.rdbuf( new_buffer ) )
    { }

    ~cout_redirect( ) {
        std::cout.rdbuf( old );
    }

private:
    std::streambuf * old;
};