5

http://msdn.microsoft.com/en-us/library/es7h5kch.aspx

这个功能看起来很可爱。这会很棒,因为您不再需要吸气剂。您可以公开成员变量;以后,如果你改变主意,你可以把它们变成财产。

这是标准委员会考虑过的事情吗?这是他们可能会接受或拒绝的事情吗?这是否已经存在而我只是还不知道?

4

2 回答 2

8

由于这已经在符合标准的 C++ 中使用仅库方法(代理对象)成为可能,因此不太可能看到语言更改和新关键字。与 lambdas 不同(例如),这里可能的语法糖并不是那么甜(不会改变抽象级别)。

顺便说一句,将字段(无包装成员变量)更改为属性始终是一项重大更改,因为您可以形成对字段的指针和引用并直接读/写它们。对于属性,您需要一个包装器以确保使用 getter 和 setter。

Microsoft 扩展的原因是它不只是在 C++ 代码中提供属性(对 getter 和 setter 函数的读写拦截)。它生成反射使用的 .NET 元数据或 WinRT 元数据(分别在 C++/CLI 和 C++/CX 中)。标准 C++ 没有反射或元数据。

另请注意,C++ 开发人员往往不太使用代理对象模式,这向委员会表明,对“更清洁”的语法糖的需求也不大。

于 2013-08-28T18:27:34.500 回答
7

这是旧的。如果我没记错的话,Borland 在 90 年代首先使用 C++ Builder 添加了它。微软紧随其后,他们当时竞争激烈。COM 自动化是一个非常重要的动力。

鉴于这需要三个 C++ 语言版本,以及围绕它的争议,未来修订版的可能性与 zilch 有关。

属性有其用途,但它们会导致相当大的实施困难。例如,通过引用传递属性是一个非常难以解决的问题。被调用者需要知道需要调用访问器,而不仅仅是取消引用指针,并且需要知道 getter 或 setter 是否存在。唯一实用的解决方案就是禁止它,在 C++ 中并不完全有吸引力。当你开始支持默认属性时,额外的问题就会增加,很难传递,引入语法歧义。

于 2013-08-28T18:53:19.030 回答