property (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, в зависимости от того, является ли это выражение значением l-value или r-value. В более сложных контекстах, например "+=", перезапись выполняется с использованием обеих функций 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;
}