禁止从const方法打印消息

时间:2013-11-01 09:56:22

标签: c++ methods const

我有一个类,它有一个方法对某些变量执行一些检查并返回一个值,并最终打印一条警告消息。由于该方法不会更改任何类变量,因此我将其定义为const。然而,为了避免泛滥输出,我想在几次(或仅一次)打印后抑制警告打印。我无法找到保持方法常量的解决方案,这是否可能(简单)?

2 个答案:

答案 0 :(得分:8)

如何使用mutable计数器?我认为,它应该是可接受的,因为它不是对象状态,它是内部逻辑状态。

像这样的东西

class Printer
{
public:
   Printer() : counter(0) {}
   void output() const
   {
      if (counter++ < max_warnings)
      {
         std::cout << "Something special" << std::endl;
      }
   }
private:
   static const size_t max_warnings = 5;
   mutable size_t counter;
};

Live example

由于有许多关于多线程的注释,例如原子计数器

class Printer
{
public:
   Printer() : counter(0) {}
   void output() const
   {
      if (counter++ < max_warnings)
      {
         std::cout << "Something special" << std::endl;
      }
   }
private:
   static const size_t max_warnings = 5;
   mutable std::atomic<size_t> counter;
};

答案 1 :(得分:0)

您可以(坚持使用ForEveR中的计数器示例)

  • 通过const
  • 播放const_cast<int>(counter)
  • 使用变量作为不在此对象中的计数器

解决方案将取决于您的实际问题,您是否会在问题中添加代码段?