C++的下一个版本是否有可能具有Microsoft的属性扩展?

Is there any chance that the next version of C++ will have Microsoft's property extension?

本文关键字:Microsoft 属性 扩展 有可能 下一个 版本 是否 C++      更新时间:2023-10-16

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

这个功能看起来很不错。这将是伟大的,因为你将不再需要getter了。您可以公开成员变量;以后,如果你改变主意,你可以把它们变成财产。

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

由于这在标准兼容的C++中已经可以使用纯库方法(代理对象),因此不太可能看到语言更改和新的关键字。与lambdas(例如)不同,这里可能的语法糖并没有那么甜(抽象级别没有太大变化)。

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

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

还要注意,C++开发人员往往不太使用代理对象模式,这向委员会表明,对"更干净"的语法糖也没有太多需求。

这是旧的。Borland第一次添加它是在90年代,如果我没有错的话,是用C++Builder添加的。微软紧随其后,他们当时竞争激烈。COM自动化是一个很大的动力。

考虑到这有三个C++语言版本需要处理,再加上围绕它的争议,在未来的修订中考虑这一点的可能性微乎其微。

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