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

См. также

Ссылки

__declspec

Ключевые слова в C++