我有一个类,它有一个方法对某些变量执行一些检查并返回一个值,并最终打印一条警告消息。由于该方法不会更改任何类变量,因此我将其定义为const。然而,为了避免泛滥输出,我想在几次(或仅一次)打印后抑制警告打印。我无法找到保持方法常量的解决方案,这是否可能(简单)?
答案 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;
};
由于有许多关于多线程的注释,例如原子计数器
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)
解决方案将取决于您的实际问题,您是否会在问题中添加代码段?