property (C++)
Блок, относящийся только к системам Майкрософт
Этот атрибут может применяться к нестатическим "виртуальным данным-членам" в определении класса или структуры. Компилятор обрабатывает эти "виртуальные данные-члены" как данные-член, заменяя ссылки вызовами функций.
Синтаксис
__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);
Завершение блока, относящегося только к системам Майкрософт
Пример
// 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 Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по