如何指定方法更改哪些数据成员
How to specify which data members are changed by a method?
假设您有一个这样的类(伪代码):
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();
}
};
这里,state
、something
和data
表示一些变量集,而不是单个变量集。doActualWork()
和prepareWorker()
都不是const
方法,但有一些内容可能对代码读者事先了解很有用:doActualWork()
只更改data
和something
,而prepareWorker()
只更改state
和something
。我希望能够强制prepareWorker
具有data
作为const
,而doActualWork
具有state
作为const
。
一种选择是使方法const
,并将它们通过引用更改的变量作为参数传递。但是,正如我所提到的,这里的变量表示一些潜在的大变量集,因此传递它们将是丑陋和无用的,因为函数已经有this
指针来知道它们的地址。同样在这种情况下,这些方法作为类的方法也没有什么优势。
我能想到的另一个选项是编写一个适配器类,例如,它将从Worker
私有继承,并提供对所有具有适当权限的变量的访问。但这似乎有点事半功倍。
有什么更好的技巧来做我想做的事吗?
您的情况可能还有其他因素会影响此建议,但我会这样做:
为data
和state
创建单独的类,为something
创建结构或类。Data对象得到一个doActualWork()
方法,state
得到一个prepareWorker()
方法。这两个方法都接受对something
结构或类的(const?)引用。
然后,Worker
的doActualWork()
和prepareWorker()
方法变成了超简单的委托器,并且通过委托给包含的类,访问限制变得明显,并由编译器强制执行。
相关文章:
- 用于访问容器<T>数据成员的正确 API
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 数据成员SFINAE的C++17测试:gcc vs clang
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 如何在c++中定义以struct为数据成员的类中的构造函数
- 静态数据成员模板专用化的实例化点在哪里
- int数据类型的指针指向的是什么,如果是一个类的私有数据成员,我们创建了该类的两个对象?
- 使用指针访问数组中的对象数据成员
- 友元函数无法访问私有数据成员 (c++)
- 我可以在 C++ 中将数据成员/变量从其定义之外添加到结构中吗?
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 将私有数据成员添加到野牛生成的类中
- 输入数据成员未按要求工作
- 二维矢量数据成员
- 在类 A 中创建类型为 B 类的向量 - 访问数据 [C++] [成员在两个类中都是私有的]
- 调用在 HXX 文件中声明的静态数据成员
- 是否可以根据其数据成员的类型确定类型的大小
- 从 XML 中读取未指定结构的每个数据成员
- 指向成员函数的指针与指向数据成员的指针有何不同
- 如何指定方法更改哪些数据成员