有没有办法在C ++中不存在时自动生成getter和setter?

时间:2011-08-02 13:16:29

标签: c++ oop setter getter accessor

我对Objective-C很有经验,在Objective-C中你可以让编译器为你生成getter和setter(如果它们不存在)(@synthesize)。

有没有办法在C ++中执行此操作,或者我是否需要自己实现所有getter和setter?

9 个答案:

答案 0 :(得分:31)

我不知道这样的实用程序,它可能在惯用的现代C ++中看不到多少用途:

现代C ++指南认为your class shouldn’t have getters and setters。事实上,制定者几乎完全无用,而吸气剂的用处非常有限。这与完善的软件工程原则tell, don’t ask有关。

如果要更改类实例的状态,有两种方法可以执行此操作:

  1. 您对其执行一项改变其状态的操作。
  2. 您创建了一个新实例。
  3. 通过setter变异状态通常是代码气味和糟糕的建筑设计的标志。

    我会批准这条规则有例外,纯粹是因为实用性。这很好,但例外情况很少,他们不保证自动生成getter和setter的工具。事实上,您可以将其用作试金石:当您发现自己希望使用自动生成此类样板的工具时,请退后一步并重新考虑您的设计。

答案 1 :(得分:8)

不是编译器本身,但像eclipse CDT 这样的IDE实际上可以自动执行此操作(右键单击类> Source>生成Getters和Setters ......)。

答案 2 :(得分:5)

你必须自己实施

答案 3 :(得分:4)

没有办法做到这一点。但是,如果您使用像Eclipse这样功能齐全的IDE(不确定Visual Studio是否具有此功能),则可以使用IDE为您生成getter / setter代码。

答案 4 :(得分:2)

不,编译器对此没有帮助。例如,您可以在构建步骤中创建MACRO或生成一些代码。

答案 5 :(得分:1)

使用访问器(以c#vb.net的形式特别容易)的优点是

1 /在setter或getter中设置断点的可能性你无法知道谁和何时有权访问该成员。

2 /您可以控制在需要测试溢出或其他错误集时设置的值。这在公共库中是特别需要的,例如您的可视组件的属性编辑器。

但是你的私人内部课程并不完全需要这个。然后,必须根据我认为对象的最终公共用途来设置对成员的受控访问的选择。

答案 6 :(得分:1)

我知道这很晚了,我正在使用VS 2015,并且可以从Visual Studio市场中安装一个插件/扩展,它将为您提供方便的位置,在这里生成https://marketplace.visualstudio.com/items?itemName=Gabsii.getter-setter-generator的getter / setter代码

答案 7 :(得分:0)

如果您正在使用某种为您生成POCO的框架,那么可以“生成”样板代码以实现此目的,但您必须首先将该概念引入框架或IDE。

答案 8 :(得分:0)

至少在Visual Studio 2015中,我无法找到它。但是,如果你使用Resharper,那么它可以在.h文件中生成setter和getter