为啥 C++ 标准没有像 C# 一样添加“属性”?

Posted

技术标签:

【中文标题】为啥 C++ 标准没有像 C# 一样添加“属性”?【英文标题】:Why has the C++ Standard not added "properties" a la C#?为什么 C++ 标准没有像 C# 一样添加“属性”? 【发布时间】:2012-04-05 10:31:42 【问题描述】:

我所说的属性是指 C# 风格的属性,包括 getter 和 setter。

我很想知道为什么它们不是 C++ 语言的一部分。我假设在编写规范时一定已经讨论过这样的特性,因此不将它包含在语言中是一个认真的决定。

【问题讨论】:

因为语言本身就很复杂,必须有一个非常好的理由在核心中包含一些东西。您可以使用现有的语言工具来创建属性。不是你应该(另见:准类)。 您的意思毫无疑问是“有意识的”,但是是的,“有责任心”正是没有包括在内的原因。他们是个坏主意,拒绝他们是正确的做法。 由 Borland 提出,但被拒绝。看这里。 open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1384.pdf 对于obj.x = 3x 实际上可以是具有重载= 运算符的类类型,并且该运算符知道如何调用obj 上的特定方法来存储一个值。该方法可以在构造函数调用中通过指向成员的指针来命名x。或者,我认为,该方法甚至可以是x 类的实例化中的模板参数。当然x也可以支持被求值,被翻译成不同的函数调用。 通过一些谷歌搜索,似乎我能找到的最接近的是以下内容。忽略最后的代码,它确实有理由反对将它们包含在内:open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1615.pdf 【参考方案1】:

这是一种实现: http://www.codeguru.com/cpp/cpp/cpp_mfc/article.php/c4031/Implementing-a-Property-in-C.htm

int i = 5,j;
PropTest test;
test.Count = i;    //-- call the set method --
j= test.Count;     //-- call the get method --

【讨论】:

以上是关于为啥 C++ 标准没有像 C# 一样添加“属性”?的主要内容,如果未能解决你的问题,请参考以下文章

像 c# 一样将 QRadioButton 显示为 QPushButton

有没有办法像在 C++ 中挂钩非托管函数一样在 C# 中挂钩托管函数?

有没有办法像在 C++ 中挂钩非托管函数一样在 C# 中挂钩托管函数?

为啥 C++ 共享指针的行为不像迭代器的标准指针?

为啥 C++ CLI 索引属性在 C# 中不起作用?

OpenCV C# 像 C++ 一样迭代 Mat 对象