半路出家 C++, 求知道参数“读/写”的标准

2021-07-12 09:54:22 +08:00
 ligiggy

之前写了几年 C#,属性搭配字段用起来是真的太香了。

但是现在用 C++,基本上单个参数的读写都要写 getter/setter 函数。

但是当有属于某个 class 的 20 多个参数需要读写的时候,就感觉单纯的 getter/setter 有点麻烦了。

我目前的做法是将 20 多个参数放到集合中,采用枚举的方式来读写这个集合中的某一个 index 。

但是我看到我的同事也有用 struct 的方式来直接读 /写。

所以想问下大家觉得应该怎么来,或者有没有类似的标准文档、书籍。

3614 次点击
所在节点    程序员
33 条回复
clockwise9
2021-07-12 15:11:07 +08:00
Protobuf (或类似物)考虑一下?
anytk
2021-07-12 15:20:47 +08:00
xcstream
2021-07-12 18:21:50 +08:00
c++是多模式的,没有统一标准
GeruzoniAnsasu
2021-07-12 19:06:39 +08:00
- 同时需要 getter 和 setter 的成员为什么不直接暴露成 public 就好?
- 多达几十个的参数全都需要一个个 set ?而不是传递统一结构或者从中间表示(比如 map ) parse ?
- 这些成员能不能重新组合?这样可以用 initializer_list 来构造组合成员,也是一种批量 set 的方式

- 你选了最不可取的一种方式,无法组合赋值、调试的时候调试器会不认识你的枚举、慢、难维护、ABI 极不稳定(万一枚举中间插了一行所有的 set 都会出错),既不解决 setter 本来解决的问题,也没有解决 get/set 很麻烦的问题
786375312123
2021-07-12 20:19:45 +08:00
"但是现在用 C++,基本上单个参数的读写都要写 getter/setter 函数。"

如果每个参数都需要暴露的话,直接弄 struct 就行了
noroot
2021-07-12 20:34:07 +08:00
getter/setter 主要用来做数据封装和有效性保护的,如果没这些需求可以直接操作。
iceheart
2021-07-12 20:56:25 +08:00
Java 里有标准,C++里没这标准。公司有标准就按公司的来,没有就自己定
edimetia3d
2021-07-12 21:49:50 +08:00
对外 public 的 interface 肯定是用 getter setter 的,理由非常多,同时建议搭配 pimpl

不对外的部分,还是怎么方便怎么写吧,getter/setter 太麻烦了
openmm
2021-07-12 23:12:08 +08:00
确实 如果不是作为很独立的模块或者写成库调用 不用 getter/setter 没毛病
mingl0280
2021-07-13 04:50:31 +08:00
自己搓俩宏生成 getter/setter 呗,C++没这标准。
ligiggy
2021-07-13 09:59:48 +08:00
@GeruzoniAnsasu 我这种方式不使用 getter/setter,插了一个枚举,唯一的问题就是从配置文件中读出来的时候,需要重新设置。但是因为有枚举值,实际上 index 传的就是枚举,在可读性上,我觉得其实是没有问题的。
7075
2021-07-13 11:02:42 +08:00
getter/setter 是更高层抽象出来的具体的工程实践特性(目标是提升工程代码质量),非语言特性。
andyhuzhill
2021-07-13 12:38:51 +08:00
用 QtCreator 是可以直接快捷键生成 getter setter 的
其实 Eclipse 也有快捷键 多熟悉一下你用的 IDE 的快捷键吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/788934

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX