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;
}

См. также

__declspec
Ключевые слова