函数级静态变量NOT static for lazy book keeping

时间:2015-06-08 15:49:07

标签: c++ static

我想使用函数级变量进行簿记,因为我不想用大量的成员变量来污染我的代码:

class A
{
void funcA() {
    // ...
    static int oldValue = -1;
    if (oldValue != newValue) {
        loadNewData();
        oldValue = newValue;
    }
}
};

但我需要变量oldValue 非静态才能对此类的每个实例进行唯一检查。有没有办法在每个实例级别上使用这个书籍保持变量的惰性实例?

2 个答案:

答案 0 :(得分:1)

没有办法在函数范围内使用非静态变量,并使用它来跟踪先前调用中分配的先前值。如您的示例所示,常规变量将被分配-1,并将按顺序保存后面的分配值(如您所知)。

您的情况正是使用实例变量的情况,因为您需要与某个方法的内容相关联的私有可变状态。您甚至可以通过OO定义/方法来说明实例变量的情况。

在getter中为实例变量提供一个惰性初始化器也很容易,为每个使用它的方法封装了相同的初始化逻辑。

虽然可能有其他方法可以解决这个问题,但它们似乎并不是最干净的解决方案。

答案 1 :(得分:1)

我没有尝试,但可能以下工作。

使用静态数组/ List和其他变量来代替单个变量,该变量用于计算实例编号。