C++属性

[C/C++]属性的秘密——C++仿C#的属性实作

自古美人都是妖i 提交于 2019-11-27 04:29:38
一直以来,我都想为C++引入C#里面定义的属性(Property),我尝试了几次: [C/C++]一个实现反射和事件绑定的例子 [C/C++]一个实现反射和事件绑定的例子 (增强版) [C/C++]模仿C#实作C++版属性绑定 读过上面三篇文章后就会发现,一直以来,我对属性的认识都是错误的,我的关注点全部放在了属性值的变化怎么被通知出去,而这在C#的属性定义中根本就是不被关注的。我们先看一下C#是怎么实现属性的。 首先我们写一个C#的普通类: class A { public double pp { get; set; } public double pv { get; protected set; } public double vp { protected get; set; } } 然后再看反编译之后的IL代码: 可以看到一个属性被分解成三块:域(Field)、getter和setter、存取器(Accessor)。 Field是C#类的成员变量被定义的地方,对应C++也是类的成员变量定义(可访问性为:private); getter和setter是C#类的成员函数,对应C++也是类的成员函数(可访问性为:private、protect或者public); Accessor才是C#真正实现属性语法的地方(如下图所示),对应C++可以使用operator运算符实现。