我正在使用一个共享库,其功能是在各处执行std :: cout。是否可以在呼叫者级别执行任何操作,我可以抑制cout outout或将其重定向到某个位置?
甚至可以在c ++中尝试这样的事情。
答案 0 :(得分:5)
像这样,只需为你的库调用创建函数包装器,重定向cout
。
int main( void )
{
std::ofstream lStream( "garbage.txt" );
std::streambuf* lBufferOld = std::cout.rdbuf();
std::cout.rdbuf( lStream.rdbuf() );
std::cout << "Calling library function" << std::endl;
std::cout.rdbuf( lBufferOld );
std::cout << "Normal output" << std::endl;
std::cout.rdbuf( lStream.rdbuf() );
std::cout << "Calling another library function" << std::endl;
std::cout.rdbuf( lBufferOld );
std::cout << "Another normal output" << std::endl;
lStream.close();
return ( 0 );
}
答案 1 :(得分:0)
您始终可以通过创建处理输出的类来过滤所有I / O.鉴于该类可能在应用程序范围内使用,静态类可能是有序的,但您可以根据需要实例化该类的实例。
除了根据参数字符串写入或不写cout或甚至选择不同的输出之外,该类还可以根据所选输出的类型格式化文本。
我看了ostream并且没有看到任何方法你可以直接修改cout。你之前遇到过一种需求,所以希望其他人阅读这篇文章可能会有更好的想法来创建我建议的课程。