在c++中,当我使用具有cout的函数时,如何避免打印消息

In c++ how to avoid print message when I use function which has cout?

本文关键字:函数 何避免 消息 打印 cout c++      更新时间:2023-10-16

如果我有两个函数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来确保流的状态得到恢复可能是合理的。

如果你可以更改产生不需要的输出的函数,我建议将此函数重写为两个函数:

  1. 一个不做任何日志记录并实现核心功能的函数
  2. 另一个进行日志记录并为实际功能调用另一个函数的函数