繁体   English   中英

如果 C++ 中不存在 getter 和 setter,有没有办法自动生成它们?

[英]Is there a way to automatically generate getters and setters if they aren't present in C++?

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

有没有办法在 C++ 中做到这一点,还是我需要自己实现所有的 getter 和 setter?

C++ 核心指南建议不要使用简单的 getter 和 setter,因为它们是不必要的,而且是糟糕的面向对象设计的症状 因此,C++ 没有用于自动生成 getter 和 setter 的内置功能(尽管 元类,如果它们被包含在语言中,将使这成为可能)。 这关系到完善的软件工程原则告诉,不要问

特别是,通过 setter 改变状态通常是代码异味和糟糕的架构设计的标志。 这条规则也有例外, 纯粹是出于实用性 这很好,但例外情况很少,它们不应该保证自动生成 getter 和 setter 的工具。

事实上,您可以将其用作试金石:每当您发现自己希望有一种工具来自动生成此类样板时,请退后一步并重新考虑您的代码设计。


也就是说,有许多工具可以提供这些功能,从纯粹的实用角度来看,它们可能证明是有用的,尽管我没有亲自测试过它们:

不是编译器本身,而是像 Eclipse CDT 这样的 IDE实际上可以自动执行此操作(右键单击 class > Source > Generate Getters and Setters...)。

你必须自己实现它们

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

不,编译器不会帮助你。 例如,您可以创建一个宏,或在您的构建步骤中生成一些代码。

我使用访问器的优势(特别是在 c# vb.net 的形式中很容易)是

1/ 在 setter 或 getter 中设置断点的可能性,否则您无法知道谁以及何时可以访问该成员。

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

但这在您的私人内部课程中并不完全需要。 然后,我认为必须从对象的最终公共使用中设置对成员的受控访问的选择。

我知道这已经晚了,我正在使用 VS 2015,并且有一个插件/扩展可以从 Visual Studio 市场安装,它可以让您方便地在此处生成 getter/setter 代码: https : //marketplace.visualstudio.com/ items?itemName=Gabsii.getter-setter-generator

至少在 Visual Studio 2015 中,我找不到它。 但是,如果您使用 Resharper,则它可以在 .h 文件中生成 setter 和 getter

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM