【问题标题】:Immutable member variables without creating a getter? [duplicate]不创建 getter 的不可变成员变量? [复制]
【发布时间】:2020-07-05 12:11:46
【问题描述】:

通常我想创建可由类修改但不能由其他外部类修改的成员变量。我这样做的方法是将成员设为私有,然后创建一个公共的 getter 函数。这似乎是额外的工作。有没有更简单的方法?

【问题讨论】:

  • 你可以让他们const
  • 创建成员变量const 会导致您的默认赋值运算符被删除,因此请注意这一点。你需要一个自定义的operator=(或者根本不分配,这可能是可取的)
  • 我不相信 C++ 中有更简单的方法。 (将它们设为 const 意味着该类也无法修改它们)
  • @Eljay:这不符合 OP 的要求。
  • 如果有帮助,请将您的 getter 函数命名为变量 x,仅命名为 x(),而不是 getx()。它看起来更整洁。这当然是一种风格,但我不喜欢将我的任何成员变量公开。它只是接口的功能。

标签: c++ idioms


【解决方案1】:

不,没有更简单的方法。抱歉...请记住,在 C++ 中,实现某个惯用语通常会花费一些时间并且可能会有些难看,但作为交换,您会得到更直接和优雅的使用。

可以做的就是为你的类的所有这些成员创建一个结构,然后至少不必为每个成员实现一个单独的 getter - 只需为结构使用一个 getter它返回一个const&

还有(1):按照@JohnFilieau 的建议,让成员命名,比如myclass::foo_,getter 命名为myclass::foo(),这并没有使实现更简单,但使使用更具可读性。

另外 (2):您可以为这样的成员(或多个成员,使用可变参数模板包)创建一个 mix-in 模板,然后从它继承。当然,这可能会使您的构造和其他方法有些复杂。

【讨论】:

  • 太棒了。我实际上已经在创建和返回结构,但我不确定这是否是最佳实践。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
相关资源
最近更新 更多