属性 (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
备注
当编译器在成员选择运算符(“.”或“->”)的右侧看到使用此特性声明的数据成员时,它会根据此类表达式是左值还是右值,将运算转换为 get
或 put
函数。 在更复杂的上下文中(如“+=
”),可通过同时执行 get
和 put
来执行重写。
此特性还可用于类或结构定义中的空数组的声明。 例如:
__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;
}
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈