下一版本的C ++是否有可能拥有微软的属性扩展?

时间:2013-08-28 18:01:51

标签: c++

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

此功能看起来非常甜美。这将是很好的,因为你不再需要吸气剂了。你可以公开成员变量;之后,如果你改变主意,就可以把它们变成财产。

这是标准委员会考虑过的吗?这是他们可能接受还是拒绝的东西?这已经存在了,我还不知道吗?

2 个答案:

答案 0 :(得分:8)

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

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

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

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

答案 1 :(得分:7)

这是旧的。如果我没有弄错的话,Borland在90年代首次使用C ++ Builder添加它。微软紧随其后,当时竞争非常激烈。 COM Automation是一个非常重要的推动因素。

鉴于这有三种C ++语言版本可供使用,以及围绕它的争议,未来版本考虑的可能性大概是zilch。

属性有它们的用途,但它们会造成相当大的实施困难。例如,通过引用传递属性是一个非常难以解决的问题。被调用者需要知道需要调用访问器,而不是仅仅解除引用指针,并且需要知道是否存在getter或setter。唯一可行的解​​决方案是禁止它,在C ++中并不具有吸引力。当您开始支持默认属性时,其他问题会加起来,很难传递,引入语法歧义。