高级语言的面向对象编程模型一般都支持“属性”接口,例如 Visual Basic 和 C#。在C#中,通过访问属性,不仅可以存取数据,还可以在存取时执行其它操作,在代码形式上,改变属性值可以写成给变量赋值的形式,例如:Form1.Size = System.Drawing.Size(640,480),而不是调用函数:Form1.SetSize ...(实际上Form没有SetSize函数)。C++语言不支持对象属性,对象的可执行接口只有函数,所以C++里没有“属性”和“方法”的概念。但是通过一些编程的技巧,可以实现一个属性访问器,使 C++ 代码可以具有和 C# 相似的编程风格。
属性访问器模板
代码如下:
template<typename TObject, typename TProperty>
struct PropAccessor
{
TObject* Instance;
PropAccessor(TObject* instance): Instance(instance){}
operator TProperty();
TProperty& operator = (TProperty value);
};
其中:operator TProperty() 用来实现属性的"get"部分,TProperty& operator=(TProperty value) 用来实现属性的"set"部分。