我对此的看法与之前的答案不同。
getter 和 setter 表明你的类没有以有用的方式设计:如果你不从内部实现抽象外部行为,那么首先使用抽象接口是没有意义的,你不妨使用一个普通的旧结构。
想想你真正需要什么操作。这几乎肯定不是直接访问位置和动量的 x y 和 z 坐标,您宁愿将它们视为向量(至少在大多数计算中,这与优化有关)。所以你想实现一个基于向量的接口*,其中基本操作是向量加法、缩放和内积。不是按组件访问;您可能有时也需要这样做,但这可以通过单个std::array<double,3> to_posarray()
成员或类似的东西来完成。
当内部组件x
, y
...vz
无法从外部访问时,您可以安全地更改内部实现,而无需中断模块外部的任何代码。这几乎就是 getter/setter 的重点;但是,当使用这些时,您只能做很多优化:任何真正的实现更改都不可避免地会使 getter 慢得多。
另一方面,您可以通过 SIMD 操作、外部库调用(可能在 CUDA 等加速硬件上)等来优化基于向量的接口。像“batch-getter”这样的“batch-getter”to_posarray
仍然可以相当有效地实现,而单变量设置器则不能。
*我在这里指的是数学意义上的向量,而不是std::vector
.