在c++中,当我使用具有cout的函数时,如何避免打印消息
In c++ how to avoid print message when I use function which has cout?
如果我有两个函数A和B,当我们使用A时,A将打印消息。B将使用A,但当我使用B时,我不想打印任何内容。我该怎么做?
double CTriangle::perimeter() const{
double D = Distance(A, B) + Distance(A, C) + Distance(B, C);
cout << "Perimeter of this triangle is: " << D << endl;
return D;
}
double CTriangle::area() const{
double p = this->perimeter() / 2;
double Area = sqrt(p * (p - Distance(A, B)) * (p - Distance(A, C)) * (p - Distance(B, C)));
cout << "Area of this triangle is: " << Area << endl;
return Area;
}
在A()
中添加一个参数,例如
void A(bool verbose = true)
{
if (verbose) cout << "Hello world!" << endl;
}
void B()
{
A(false);
}
int main()
{
A(); // outputs "Hello world!"
B(); // calls A, but no output
return 0;
}
假设您无法控制进行打印的函数,则可以将std::cout
置于不打印任何内容的状态,例如:
std::cout.setstate(std::ios_base::failbit); // set error flag, disabling output
double d = this->perimeter();
std::cout.clear(); // clear flags, reenabling output
您可以合理地查看资源的流状态,也就是说,使用RAII来确保流的状态得到恢复可能是合理的。
如果你可以更改产生不需要的输出的函数,我建议将此函数重写为两个函数:
- 一个不做任何日志记录并实现核心功能的函数
- 另一个进行日志记录并为实际功能调用另一个函数的函数
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 专门化模板覆盖函数/避免对象切片
- 使用 pybind11 调用 Python 函数时避免复制输入数据
- 模函数,避免C++整数溢出
- 使用 std::enable_if 重载函数以避免模板替换错误
- 调用委托构造函数时避免复制
- 使用没有对象的另一个类的成员函数,避免静态
- 实现递归函数,避免由 C++ 中 include 的循环调用(没有 #pragma 一次)引起的无限循环输入
- 定义专用模板类构造函数时避免重复
- 如何在将数组传递给 C++ 中的函数时避免堆栈溢出
- C++调用不同的类构造函数,避免切换
- 使用委托构造函数来避免泄漏
- 在一个简单的映射函数中避免IF
- 'inline'__global__函数以避免多个定义错误
- 如何在调用父构造函数时避免模板参数上的样板文件
- 通过实现两个不同于const的函数来避免代码重复
- C++:通过调用纯虚拟函数来避免重复
- 如何正确组合来自基类和派生类的函数以避免警告
- 正在设计rehash函数..如何避免相同的散列