5

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

4

2 回答 2

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

活生生的例子

由于有很多关于多线程的评论,例如原子计数器

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;
};
于 2013-11-01T09:59:46.667 回答
0

你可以(坚持ForEveR的反例)

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

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

于 2013-11-01T10:27:20.140 回答