property (C++)property (C++)

Microsoft 固有の仕様Microsoft Specific

この属性は、クラスまたは構造体の定義の非静的 "仮想データ メンバー" に適用できます。This attribute can be applied to non-static "virtual data members" in a class or structure definition. コンパイラは、参照を関数呼び出しに変更することにより、これらの "仮想データ メンバー" をデータ メンバーとして処理します。The compiler treats these "virtual data members" as data members by changing their references into function calls.


   __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関数は、このような式は、左辺値または右辺値かどうかによって異なります。When the compiler sees a data member declared with this attribute on the right of a member-selection operator ("." or "->"), it converts the operation to a get or put function, depending on whether such an expression is an l-value or an r-value. さらに複雑なコンテキストなど"+="、両方の手順を実行して、再書き込みが実行されるgetputします。In more complicated contexts, such as "+=", a rewrite is performed by doing both get and put.

この属性は、クラスまたは構造体の定義の空の配列の宣言でも使用できます。This attribute can also be used in the declaration of an empty array in a class or structure definition. 例えば:For example:

__declspec(property(get=GetX, put=PutX)) int x[];

前のステートメントは、x[] を 1 つ以上の配列インデックスで使用できることを示します。The above statement indicates that x[] can be used with one or more array indices. この例では、i=p->x[a][b]i=p->GetX(a, b) になります。また、p->x[a][b] = ip->PutX(a, b, i); になります。In this case, i=p->x[a][b] will be turned into i=p->GetX(a, b), and p->x[a][b] = i will be turned into p->PutX(a, b, i);

Microsoft 固有の仕様はここまでEND Microsoft Specific


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

関連項目See also