如何指定方法更改哪些数据成员

How to specify which data members are changed by a method?

本文关键字:数据成员 何指定 方法      更新时间:2023-10-16

假设您有一个这样的类(伪代码):

class Worker
{
    int state;
    int something;
    int data;
    void prepareWorker()
    {
        state=get_some_value(data,something);
        something=get_another_value();
    }
    int doActualWork()
    {
        data*=5;
        something+=data;
        return state+data*something;
    }
public:
    Worker() : something(235), data(1) {}
    int doSomeWork()
    {
        prepareWorker();
        return doActualWork();
    }
};

这里,statesomethingdata表示一些变量集,而不是单个变量集。doActualWork()prepareWorker()都不是const方法,但有一些内容可能对代码读者事先了解很有用:doActualWork()只更改datasomething,而prepareWorker()只更改statesomething。我希望能够强制prepareWorker具有data作为const,而doActualWork具有state作为const

一种选择是使方法const,并将它们通过引用更改的变量作为参数传递。但是,正如我所提到的,这里的变量表示一些潜在的大变量集,因此传递它们将是丑陋和无用的,因为函数已经有this指针来知道它们的地址。同样在这种情况下,这些方法作为类的方法也没有什么优势。

我能想到的另一个选项是编写一个适配器类,例如,它将从Worker私有继承,并提供对所有具有适当权限的变量的访问。但这似乎有点事半功倍。

有什么更好的技巧来做我想做的事吗?

您的情况可能还有其他因素会影响此建议,但我会这样做:

datastate创建单独的类,为something创建结构或类。Data对象得到一个doActualWork()方法,state得到一个prepareWorker()方法。这两个方法都接受对something结构或类的(const?)引用。

然后,WorkerdoActualWork()prepareWorker()方法变成了超简单的委托器,并且通过委托给包含的类,访问限制变得明显,并由编译器强制执行。