redirect stdout/stderr to a string

来源:互联网 发布:编程语言执行效率 编辑:程序博客网 时间:2024/04/30 03:43

Q:

there has been many previous questions about redirecting stdout/stderr to a file. is there a way to redirect stdout/stderr to a string?



A:

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; }; 


原创粉丝点击