主要观点:在既有前沿 C++ 构造又有深度遗留设计决策的遗留代码库中,可巧妙利用两者。以一个有不必要公共数据成员的类为例,通过将数组移到私有部分并以指针形式重新引入公共名称,在不影响只读访问的情况下解决问题,但此方法在序列化、复制等方面存在不足,对于非数组数据成员需用不同方式处理,作者的遗留代码库最终因Hidden
类示例效果不佳而采用依赖流程和代码审查的方式来保持代码的合理性。
关键信息:
- 有一个
Example
类,其中needlesslyPublic
是不必要的公共数据成员,有读写函数reset
和只读函数consumer
。 - 通过将数组移到私有部分并以指针形式重新引入公共名称,实现只读访问。
- 引入
Hidden
类提供只读接口,但存在friend
声明等问题。 - 对于非数组数据成员需用不同方式处理。
重要细节: Example
类中reset
函数用于填充数组,consumer
函数用于读取数组元素。- 以指针形式重新引入公共名称利用了数组指针衰减特性。
Hidden
类的operator[]
函数提供只读访问接口,friend
声明允许Example
类访问其私有数据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。