属性 (C++)

Microsoft 专用

此特性可应用于类或结构定义中的非静态“虚拟数据成员”。 编译器通过将这些“虚拟数据成员”的引用更改为函数调用来将其作为数据成员处理。

语法

   __declspec( property( get=get_func_name ) ) declarator
   __declspec( property( put=put_func_name ) ) declarator
   __declspec( property( get=get_func_name, put=put_func_name ) ) declarator

备注

当编译器在成员选择运算符(“.”或“->”)的右侧看到使用此特性声明的数据成员时,它会根据此类表达式是左值还是右值,将运算转换为 getput 函数。 在更复杂的上下文中(如“+=”),可通过同时执行 getput 来执行重写。

此特性还可用于类或结构定义中的空数组的声明。 例如:

__declspec(property(get=GetX, put=PutX)) int x[];

上面的语句指示 x[] 可用于一个或多个数组索引。 在这种情况下,i=p->x[a][b] 将变为 i=p->GetX(a, b)p->x[a][b] = i 将变为 p->PutX(a, b, i);

结束 Microsoft 专用

示例

// declspec_property.cpp
struct S {
   int i;
   void putprop(int j) {
      i = j;
   }

   int getprop() {
      return i;
   }

   __declspec(property(get = getprop, put = putprop)) int the_prop;
};

int main() {
   S s;
   s.the_prop = 5;
   return s.the_prop;
}

另请参阅

__declspec
关键字